基本类型
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










网友评论