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

猜你喜欢

转载自blog.csdn.net/weixin_34235135/article/details/93181979