$ .isPlainObject ($ ('...')) == true в IE - PullRequest
4 голосов
/ 03 августа 2010

Это не в FF / Chrome, и я не думаю, что это должно быть в IE. В конце концов, $ () не возвращает простой объект, но экземпляр $. Я не прав?

1 Ответ

6 голосов
/ 03 августа 2010

Краткий ответ: нет, вы не сумасшедший , это действительно ошибка в ядре 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...