它不在FF / Chrome中,我认为它不应该在IE中。毕竟$()不返回普通对象,而是返回$的实例。我错了吗?
答案 0 :(得分:6)
简答: 不,你不是疯了,它确实是jQuery核心中的一个错误。
长答案:
我设置了一个快速测试,看看这里有什么区别:http://jsfiddle.net/nick_craver/9J3VP/
属性列表在IE中的顺序不同(至少8个),因此这部分(from jQuery core):
var key;
for ( key in obj ) { }
它抓住列表中的最后一个属性并对其进行hasOwnProperty
检查,所以它在IE中沸腾了:
Object.prototype.hasOwnProperty.call($(document.body), 'length') //true
这在其他浏览器中(经过测试的FF / Chrome):
Object.prototype.hasOwnProperty.call($(document.body), 'width') //false
由于该属性列表的排序方式不同,它在IE中抓取length
属性,在其他浏览器中抓取 else ,我们得到的结果不同(对于踢,点击以包括左侧的jQuery UI,观察它更改为另一个自定义属性tabs
)。 This comment above the for
loop:
// Own properties are enumerated firstly, so to speed up,
// if last one is own, then all properties are own.
关于IE的属性排序是一个错误的假设,所以我认为这是jQuery 1.4.2中的一个错误。