Javascript 类型判断

2019-10-11  本文已影响0人  菜鸟很浮夸

基本类型

typeof

一般使用 typeof 操作符,可以判断出:

和引用类型:

特别的是,typeof null 结果是 object。
所以,用 === nulltypeof 就可以判断出所有基本类型。

内置类型

Javascript 内置类型有:

和基本包装类型:

对于这些类型,通常使用下面方法判断:

 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]'
}

另外

用户自定义类型

用户自定类型判断,一般使用 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
上一篇 下一篇

猜你喜欢

热点阅读