24-数据类型的判断

数据类型的判断

  • typeof
  • instanceof
  • Object.prototype.toString()

typeof
typeof 操作符来判断一个值属于哪种基本类型,返回值是一个string,对null判断有误,认为null是个空指针

typeof 'seymoe' // 'string' 
typeof true // 'boolean' 
typeof 10 // 'number' 
typeof Symbol() // 'symbol' 
typeof null // 'object' 
无法判定是否为 null 
typeof undefined // 'undefined'

如果使用 typeof 操作符对对象类型及其子类型,譬如函数(可调用对象)、数组(有序索引对象)等进行判定,则除了函数都会得到 object 的结果。

typeof {} // 'object'
typeof [] // 'object'
typeof(() => {})// 'function'

由于无法得知一个值到底是数组还是普通对象,显然通过 typeof 判断具体的对象子类型远远不够。

instanceof

通过 instanceof 操作符也可以对对象类型链上的构造函数进行判定,其原理就是测试构造函数的 prototype 是否出现在被检测对象的原型链上。

[] instanceof Array            // true
({}) instanceof Object         // true
(()=>{}) instanceof Function   // true

注意:instanceof 也不是万能的。其原理就是测试构造函数

 var a={}
 a.__proto__=[]
 a instanceof Array //true
 a instanceof Object //true

Object.prototype.toString()
Object.prototype.toString() 可以说是判定 JavaScript 中数据类型的终极解决方法了,具体用法请看以下代码:

 Object.prototype.toString.call({})            // '[object Object]'
 Object.prototype.toString.call([])              // '[object Array]'
 Object.prototype.toString.call(() => {})        // '[object Function]'
 Object.prototype.toString.call('seymoe')        // '[object String]'
 Object.prototype.toString.call(1)               // '[object Number]'
 Object.prototype.toString.call(true)            // '[object Boolean]'
 Object.prototype.toString.call(Symbol())        // '[object Symbol]'
 Object.prototype.toString.call(null)            // '[object Null]'
 Object.prototype.toString.call(undefined)       // '[object Undefined]'

 Object.prototype.toString.call(new Date())      // '[object Date]'
 Object.prototype.toString.call(Math)            // '[object Math]'
 Object.prototype.toString.call(new Set())       // '[object Set]'
 Object.prototype.toString.call(new WeakSet())   // '[object WeakSet]'
 Object.prototype.toString.call(new Map())       // '[object Map]'
 Object.prototype.toString.call(new WeakMap())   // '[object WeakMap]'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值