JS 判断数据类型的方法

首先要知道 js 的数据类型有哪些

基本类型:Number、Boolean、String、Undefined、Null 、Symbol(es6 新增)

引用类型:Object

判断方法:

  • typeof
console.log(typeof(1));          //number
console.log(typeof(true));           //boolean
console.log(typeof('1'));               //string
console.log(typeof(a));             //undefined
console.log(typeof(function(){alert(111)}));    //function
console.log(typeof(Symbol()));           //symbol
console.log(typeof(null));          //object
console.log(typeof([]));              //object
console.log(typeof(/sa/));                 //object
console.log(typeof(new Date()));              //object

小结: typeof 返回值包括 Number、Boolean、String、Undefined、Symbol(es6 新增)、Object

  • instanceof
console.log([] instanceof Array);
console.log([] instanceof Object);
console.log(/as/ instanceof RegExp);
console.log({} instanceof Object);
console.log(new Date() instanceof Date);

function Person(){};
console.log(new Person() instanceof Object);

小结:instanceof 只能确定两个对象是否属于原型关系,但是不能具体确定类型,比如 [] 既是 Array 的实例,也是 Object 的实例

  • Object.prototype.toString.call
console.log(Object.prototype.toString.call('')) ;   // [object String]
console.log(Object.prototype.toString.call(1)) ;    // [object Number]
console.log(Object.prototype.toString.call(true)) ; // [object Boolean]
console.log(Object.prototype.toString.call(Symbol())); //[object Symbol]
console.log(Object.prototype.toString.call(undefined)) ; // [object Undefined]
console.log(Object.prototype.toString.call(null)) ; // [object Null]
console.log(Object.prototype.toString.call(new Function())) ; // [object Function]
console.log(Object.prototype.toString.call(new Date())) ; // [object Date]
console.log(Object.prototype.toString.call([])) ; // [object Array]
console.log(Object.prototype.toString.call(new RegExp())) ; // [object RegExp]
console.log(Object.prototype.toString.call(new Error())) ; // [object Error]
console.log(Object.prototype.toString.call(document)) ; // [object HTMLDocument]
console.log(Object.prototype.toString.call(window)) ; //[object global] window是全局对象 global 的引用

小结:需要注意的是,必须通过 call 或 apply 来调用,而不能直接调用 toString 。

从原型链的角度讲,所有对象的原型链最终都指向了 Object, 按照JS变量查找规则,其他对象应该也可以直接访问到 Object 的 toString方法,而事实上,大部分的对象都实现了自身的 toString 方法,这样就可能会导致 Object 的 toString 被终止查找,因此要用 call/apply 来强制调用Object 的 toString 方法。

参考文章:http://www.cnblogs.com/onepixel/p/5126046.html

猜你喜欢

转载自blog.csdn.net/zhaileilei1/article/details/77675634