1

判断变量类型

javaSctipt数据类型7种: Number, String, Boolean, Null, Undefined, Object, Symbol

typeof操作符

可能返回的值如下

  • undefined
  • boolean
  • string
  • number
  • object
  • function

注意: typeof 的能力有限,其对于null, Date、RegExp类型返回的都是"object"

typeof null // 'object'
typeof {}; // "object" 
typeof []; // "object" 
typeof new Date(); // "object"

使用场景:区分对象和原始类型,要区分一种对象类型和另一种对象类型,可以使用: instanceof运算符或对象contructor属性

instanceof运算符

用法: 左边的运算数是一个object,右边运算数是对象类的名字或者构造函数;返回true或false

[] instanceof Array; // true
[] instanceof Object; // true
[] instanceof RegExp; // false
new Date instanceof Date; // true

如果object是class或者构造函数的实例,则返回true,如果不是或者是null也返回false
instanceof运算符判断是否为数组类型

function isArray(arr){ 
  return arr instanceof Array; 
}

contructor属性

所有的对象都有一个constructor属性,指向该对象的基本对啊性构造函数类型的属性

var a = new Array;
a.constructor === Array // true

var n = new Number(3);
n.constructor === Number; // true

判断为数组还可以这样

function isArray(arr){ 
  return typeof arr === "object" && arr.constructor === Array; 
}

Object.ProtoType.toString()

每个对象都有一个toString()方法,返回"[object type]",其中type是对象的类型
当执行该方法时,执行以下步骤
1,获取对象的class属性
2,连接字符串 "[object "+结果1+"]" ;

所以可以通过toString()来获取每个对象的类型,为了每个对象都可以通过Object.protoType.toString()来检测,需要以Funciton.prototype.call()或Function.prototype.apply()的形式来调用,传递要检查的对象作为第一个参数,称为thisArg

Object.prototype.toString.call(new Date); // "[object Date]"
Object.prototype.toString.call([]); // "[object Array]"
Object.prototype.toString.call(/reg/ig); // "[object RegExp]"

参考

JavaScript中判断对象类型的几种方法总结

About

github
blog


IOneStar
3.1k 声望1.9k 粉丝