instanceof & isArray & tostring.call() 判断数组的区别

之前看源码的时候,看见一个判断值是否时数组类型的方法时,心中有了疑问。

由于之前一直都用Array.isArray(val)和instanceof的方式判断数组类型,但是源码上判断数组是这样的:

toString.call(val) === "[object Array]"
复制代码

不清楚作者为什么选择用这个方式判断数组类型的前提下,我去查了资料。

我找出了instanceof , isArray和源码中提到的方式。

val instanceof Array // 不支持iframede的窗口对象的数组创建的数组
Array.isArray(val) // 支持上述
复制代码

那么,源码中提到的判断数组类型和Array.isArray(val);有什么区别呢?

原因在于 Array.isArray是es5的方法,不支持ie8以下的浏览器
复制代码

不啰嗦:

对于项目中采用哪种方式,完全跟你的业务需求息息相关。

如果你的项目不需要兼容低版本浏览器。那么, Array.isArray(val)就够了。

如果你的项目连iframe的数组判断都可以忽略,那么instanceof就好了。

如果你的项目,需要足够高的要求,并且兼容低版本浏览器,你应该采用toString的类型判断。

感谢,有收获的请点个赞。>_<

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值