最安全的类型判断

typeof

typeof操作符可以安全准确的判断出BooleanNumberundefinedStringSymbol这5种基本类型。但是对与引用类型null来说,返回的都是object

在现代浏览器中,typeof可以准确的判断出一个变量是不是一个函数,如果是函数就返回字符串function

instanceof

instanceof弥补了typeof的不足,可以用来判断引用类型的数据类型。但有的时候并不能保证准确性,比如在不同作用域中,修改了原始的构造函数。

 const global = new Array()
 
 function foo () {
     class Array {}                         // 在foo函数作用域内重写Array
     
     console.log(global instanceof Array)   // 猜打印出的是false还是true
 }
 
 foo()                                      // 打印出的是false
复制代码

通过上面的例子可以看出,使用instanceof操作符不总是准确安全的

最安全的做法

大家都知道每个引用类型都包含一个toString的原型方法,有的构造函数会修改自己原型对象上的toString方法,我们可以通过Object.prototype.toString来调用最原始的toString方法。该方法会返回类似于[object Object]的字符串,Array的实例会返回[object Array]这样的,其它类型类似。会发现不同类型的实例返回的字符串和自己的构造函数的名字相同,于是我们就可以利用这一点来准确的判断数据的类型。

// 还是上面的例子,这次我们改用Object.prototype.toString来判断
const global = new Array()
const toSting = Object.prototype.toString
 
 function foo () {
     class Array {}
     
     console.log(toString.call(global) === '[object Array]')
 }
 
 foo()  // 你会惊奇的发现打印出来的是true,完美判断出来global的类型...
复制代码

没错,就是这么强大。

完。

转载于:https://juejin.im/post/5c0c9976e51d4522ad6e531d

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值