在js 中 , 有一种判断数据基本类型的方法 typeof , 只能判断5中基本类型:即 “number”,”string”,”undefined”,”boolean”,”object” 五种。
用法为:
typeof 1
typeof str
console.log(typeof 1) //打印出 number
typeof 'a' == 'string' //结果为true
可见: typeof 会根据对象类型返回对应的类型字符串, 但是有几个缺点:
- 对于数组、函数、对象来说,其关系错综复杂,使用 typeof 都会统一返回 “object” 字符串,
- null也会返回’object’
- 对NaN返回是’number’
即
let a={i:1} let a =[1,2], let a = func...
typeof a //这个结果都是object
var obj = null
if (typeof obj === 'object') {
obj.a() // 这里报错
}
var obj = {}
var num = parseInt(obj.a)
if (typeof num === 'number') {
num = num + 10 // 执行后num仍然是NaN
}
那么此时我们有第二个方法可以使用, 是 ES3中的 Object.prototype.toString方法,我们可以用Object.prototype.toString.call(obj)检测对象类型:
console.log(Object.prototype.toString.call("jerry"));//[object String]
console.log(Object.prototype.toString.call(12));//[object Number]
console.log(Object.prototype.toString.call(true));//[object Boolean]
console.log(Object.prototype.toString.call(undefined));//[object Undefined]
console.log(Object.prototype.toString.call(null));//[object Null]
console.log(Object.prototype.toString.call({name: "jerry"}));//[object Object]
console.log(Object.prototype.toString.call(function(){}));//[object Function]
console.log(Object.prototype.toString.call([]));//[object Array]
console.log(Object.prototype.toString.call(new Date));//[object Date]
console.log(Object.prototype.toString.call(/\d/));//[object RegExp]
function Person(){};
console.log(Object.prototype.toString.call(new Person));//[object Object]
使用方法如下:
判断是否为函数
function isFunction(it) {
return Object.prototype.toString.call(it) === '[object Function]';
}
判断是否为数组:
function isArray(o) {
return Object.prototype.toString.call(o) === '[object Array]';
}