之前看源码的时候,看见一个判断值是否时数组类型的方法时,心中有了疑问。
由于之前一直都用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的类型判断。
感谢,有收获的请点个赞。>_<