1.typeof
主要用于判断基本数据类型,使用方式:typeof(表达式) / typeof 变量名。第一种是对表达式做运算,第二种是对变量做运算
值 | 对应类型 |
---|
undefined | 未定义的变量或值 | boolean | 布尔类型的变量或值 | string | 字符串类型的变量或值 | number | 数值类型的变量或者值 | object | 对象类型的变量或者值,或 null(js设立历史遗留问题) | function | 函数类型的变量或者值 |
typeof 的缺陷
- 不能区分对象、数组、正则,这几种的返回值都是“object”;
- 存在一些浏览器版本限制,Safari5、Chrom7 之前的版本,正则返回值都是“function”;
- 在 IE6、7和8中,会将大多数的数组对象识别为是对象(object),而不是函数;而在非 IE浏览器,或者 IE9及以上(包括 IE9)浏览器中,又会识别为函数;
- 无法有效识别 null,会直接返回 object。
2.instanceof
用于引用数据类型的判断。所有引用数据类型的值都是 Object 的实例,目的是判断一个对象在其原型链上是否存在构造函数的 prototype 属性。
使用方式:变量/表达式 instanceof 指定判断的类型 ,返回 true或者 false
instanceof 不仅能检测构造对象的构造器,还能检测原型链。instanceof 使用时,要求其前面是个对象,后面是个对象,返回布尔值。
3.Array.isArray()
Array.isArray9() 可以用于判断数组类型,支持的浏览器 IE9及以上、firefox4及以上、Safari5及以上,以及Chrome浏览器。当需要在特定版本的浏览器使用时,可以按照以下的兼容性写法使用:
if(!Array.isArray){
Array.isArray = function (arg){
return Object.prototype.toString.call(arg) === '[object Array]';
}
}
**注意:**isArray 是一个静态方法,使用 Array 对象(类)调用,而不是数组对象实例。实际上,Array.prototype 也是一个数组。
在正式使用里,Array.isArray 优于 instanceof。
4.Object.prototype.toString.call()
用于判断某个对象值属于那种内置的数据类型,最靠谱的最做法就是使用 Object.prototype.toString.call() 方法。这种方法的输出值就是 【object 对象数据类型】。
console.log(Object.prototype.toString.call("a12"));
这里是万物之恋,我们下次再见了!
|