javaScript中检测数据类型的几种方式
1.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
3.Array.isArray()
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()
console.log(Object.prototype.toString.call("a12"));
这里是万物之恋,我们下次再见了!