基本类型
typeof
一般使用 typeof
操作符,可以判断出:
- boolean
- number
- string
- undefined
- symbol
和引用类型:
- function
特别的是,typeof null
结果是 object。
所以,用 === null
和 typeof
就可以判断出所有基本类型。
内置类型
Javascript 内置类型有:
- Object
- Array
- Date
- RegExp
- Function
和基本包装类型:
- Boolean
- Number
- String
对于这些类型,通常使用下面方法判断:
Object.prototype.toString.call()
如:
var _toString = Object.prototype.toString;
// 判断是否是简单对象
function isPlainObject (obj) {
return _toString.call(obj) === '[object Object]'
}
// 判断是否是正则表达式对象
function isRegExp (v) {
return _toString.call(v) === '[object RegExp]'
}
另外
- 类似
new String()
,这种使用new
基本包装类型得到的 字符串对象,使用typeof
运算得到的结果是 object。 - 对于 Array 类型,普遍使用
Array.isArray()
来判断 - Function 类型,可以使用
typeof
判断
用户自定义类型
用户自定类型判断,一般使用 instanceof
运算符。
如:
class A {}
var a = new A()
var arr = []
console.log(a instanceof A) // true
console.log(arr instanceof Array) // true
上面对于 Array 内置类型使用 instanceof
效果也很好。但一般不这么干,因为 instanceof
相对上面介绍的方法,不怎么靠谱:
但是
instanceof
的定义是:
object instanceof constructor
instanceof
运算符用来检测constructor.prototype
是否存在于参数object
的原型链上。
也就是说,手动改变对象的原型链或修改构造函数的原型对象,instanceof
就不灵了。
class A {}
var a = new A()
var arr = []
console.log(a instanceof A) // true
console.log(arr instanceof Array) // true
// 修改原型链
a.__proto__ = null
Object.setPrototypeOf(arr, null)
console.log(a instanceof A) // false
console.log(arr instanceof Array) // false
网友评论