一、typeof
使用typeof检测数据类型,返回值是一个字符串;
检测基本数据类型,准确率高;但是对于引用数据类型,准确率低
1、字符串-----------'string'
2、数值/NaN-------'number'
3、布尔值-----------'boolean'
4、null/object ------'object'
这是由于历史原因造成的。1995年的 JavaScript 语言第一版,只设计了五种数据类型(对象、整数、浮点数、字符串和布尔值),没考虑null,只把它当作object的一种特殊值。后来null独立出来,作为一种单独的数据类型,为了兼容以前的代码,typeof null返回object就没法改变了。
typeof window; //'object'
typeof {}; // 'object'
typeof []; //'object'
5、函数 -------------'function'
6、未定义的变量--'undefined'
二、instanceof
检测 a 是否是 b 的实例 a instanceof b
instanceof后跟的是构造函数名称
返回的是一个布尔值
注意:所有的对象(function,array,object,基本包装类型)都是Object的实例
console.log(arr instanceof Array); //true
console.log(arr instanceof Object); //true
console.log(obj instanceof Object); //true
console.log(obj instanceof Array); //false
var num = new Number("11");
console.log(num instanceof Number); //true
console.log(num instanceof Object); //true
三、Object.prototype.toString
最准确的检测方法,可以检测所有的数据类型
Object.prototype.toString.call(检测的数据).slice(8,-1).toLowerCase(); 得到的是小写的数据类型
console.log(Object.prototype.toString.call(123)); //[object Number]
console.log(Object.prototype.toString.call('123')); //[object String]
console.log(Object.prototype.toString.call(undefined)); //[object Undefined]
console.log(Object.prototype.toString.call(true)); //[object Boolean]
console.log(Object.prototype.toString.call({})); //[object Object]
console.log(Object.prototype.toString.call([])); //[object Array]
console.log(Object.prototype.toString.call(function(){})); //[object Function]
console.log(Object.prototype.toString.call(null)); //[[object Null]]
网友评论