1、typeof
- 对于基本数据类型,
null
不能准确判断,会显示为object
- 对于引用类型,数组类型不能准确判断,会显示为
object
2、instanceof
- 原理:通过原型链进行判断
[] instanceof Array // true
{} instanceof Object // true
new String('welnee') instanceof String // true
- 实现:
function myInstanceof(left, right) {
left = left.__proto__
right = right.prototype
while (true) {
if (!left) return false
if (left === right) return true
left = left.__proto__
}
}
3、最准确的判断方法String.prototype.toString.call()
Object.prototype.toString 方法返回对象的类型字符串,因此可以用来判断一个值的类型
不同数据类型的 Object.prototype.toString 方法返回值如下:
- 数值:返回[object Number]
- 字符串:返回[object String]
- 布尔值:返回[object Boolean]
- undefined:返回[object Undefined]
- null:返回[object Null]
- 数组:返回[object Array]
- arguments 对象:返回[object Arguments]
- 函数:返回[object Function]
- Error 对象:返回[object Error]
- Date 对象:返回[object Date]
- RegExp 对象:返回[object RegExp]
- 其他对象:返回[object Object]
Object.prototype.toString.call(2) // "[object Number]"
Object.prototype.toString.call('') // "[object String]"
Object.prototype.toString.call(true) // "[object Boolean]"
Object.prototype.toString.call(undefined) // "[object Undefined]"
Object.prototype.toString.call(null) // "[object Null]"
Object.prototype.toString.call({}) // "[object Object]"
Object.prototype.toString.call([]) // "[object Array]"
参考链接