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

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

因为以前一直都用Array.isArray(val)和instanceof的方式判断数组类型,可是源码上判断数组是这样的:浏览器

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

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

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

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

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

缘由在于 Array.isArray是es5的方法,不支持ie8如下的浏览器
复制代码

不啰嗦:code

对于项目中采用哪一种方式,彻底跟你的业务需求息息相关。对象

若是你的项目不须要兼容低版本浏览器。那么, Array.isArray(val)就够了。iframe

若是你的项目连iframe的数组判断均可以忽略,那么instanceof就行了。源码

若是你的项目,须要足够高的要求,而且兼容低版本浏览器,你应该采用toString的类型判断。string

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

相关文章
相关标签/搜索