代码之家  ›  专栏  ›  技术社区  ›  Master Morality

在IE中,.isplainObject($('..')==true

  •  4
  • Master Morality  · 技术社区  · 15 年前

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

    1 回复  |  直到 15 年前
        1
  •  6
  •   Nick Craver    15 年前

    简短回答: 不,你不是疯了 它确实是jquery核心中的一个bug。


    长回答:

    我设置了一个快速测试,看看这里有什么区别: 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
    

    由于该财产清单的顺序不同,它将 length 在IE中的属性,等等 其他的 在其他浏览器中,我们得到了不同的结果(对于kicks,单击左侧的include 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开始,我认为这是一个bug。