Краткий ответ: нет, вы не сумасшедший , это действительно ошибка в ядре jQuery.
Длинный ответ:
Я настроил быстрый тест, чтобы увидеть, в чем здесь разница: http://jsfiddle.net/nick_craver/9J3VP/
Список свойств отличается в своем порядке в IE (минимум 8), поэтому эта часть ( из ядра jQuery ):
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 и что-то иначе в других браузерах, мы получаем другой результат (для ударов, нажмите, чтобы включить jQuery UI слева, посмотрите, как он меняется на другое пользовательское свойство, tabs
). Этот комментарий над циклом for
:
// Own properties are enumerated firstly, so to speed up,
// if last one is own, then all properties are own.
Это ложное предположение об упорядочении свойств IE, поэтому я считаю это ошибкой, начиная с jQuery 1.4.2.