我正在查看jQuery代码,发现isArray是使用内置函数toString实现的。我在MDC上找不到此功能的文档。该文件是否存在?这个功能有什么作用?
isArray: function( obj ) {
return toString.call(obj) === "[object Array]";
},
答案 0 :(得分:3)
我正在查看jQuery代码,发现isArray是使用内置函数toString实现的
它不是内置的。见第68行:
toString = Object.prototype.toString,
jQuery正在toString
的{{1}}方法下复制一个名为Object
的变量。 toString
方法记录在MDC here(以及ECMAScript本身)。然后,jQuery使用Object#toString
调用方法的变量副本,并将对象作为call
传入。这种环形交换调用方法是这样的,你不能创建一个覆盖this
并且可能返回字符串toString()
的对象。
(特别是,字符串'[object Array]'
本身将'[object Array]'
作为其[object Array]
值,因此如果toString()
被调用,则会被错误地检测为数组直接调用obj.toString()
Object
的基本实现可以避免这种情况。)
测试toString()
表示形式是丑陋的(在主机对象的情况下仍然不是100%),但更直接的toString()
不适用于跨窗口脚本,因为obj instanceof Array
是每个窗口/框架中的不同构造函数。
ECMAScript第五版添加了函数Array
以避免这种不愉快。但是,浏览器支持目前很差。