IE中的$ .isPlainObject($('...'))== true

时间:2010-08-03 18:36:47

标签: jquery internet-explorer

它不在FF / Chrome中,我认为它不应该在IE中。毕竟$()不返回普通对象,而是返回$的实例。我错了吗?

1 个答案:

答案 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中的一个错误。