美文网首页
Javascript 类型判断

Javascript 类型判断

作者: 菜鸟很浮夸 | 来源:发表于2019-10-11 19:10 被阅读0次

基本类型

typeof

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

  • boolean
  • number
  • string
  • undefined
  • symbol

和引用类型:

  • function

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

内置类型

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

相关文章

网友评论

      本文标题:Javascript 类型判断

      本文链接:https://www.haomeiwen.com/subject/vxpxmctx.html