Какой смысл делать window.undefined = window.undefined
Я смотрел прошлые версии кода jQuery, и кажется, что в каждой версии у них есть эта строка кода где-то внутри:
window.undefined = window.undefined;
Я не могу понять, почему это важно и что еще важнее, что это делает. Кажется, это присваивание undefined
до undefined
, что не имеет для меня никакого смысла.
Однако это кажется важным, и мне это интересно.
Ответы
Ответ 1
window.undefined
не всегда существовал, поэтому код, подобный if (foo === undefined)
, выкидывал бы ReferenceError в старых браузерах, потому что undefined
не определен (т.е. он не объявлен). Этот код просто гарантирует, что undefined
определен (как undefined).
Это не так уж и ненужно, потому что существует так много способов получить значение undefined
без одноименного глобального свойства. Например, вы могли бы написать if (foo === void 0)
или даже что-то вроде if (foo === [][0])
.
Более поздние версии, похоже, предполагают, что window.undefined
существует во всех поддерживаемых браузерах. последние версии используют шаблон, подобный этому:
(function( window, undefined ) {
...
})( window );
Обратите внимание, что для undefined
не передается значение, поэтому он гарантированно объявляется как локальная переменная и имеет значение undefined
.
Ответ 2
Используя это, jQuery определяет глобальную переменную с вещественным значением undefined
. имея глобальную переменную типа myvar
, означает, что вы используете эту переменную в своей области window
(например, window.mywar
), если вы запустите этот код в области окна:
var myvar = "whatever";
javascript определяет вашу переменную, как если бы вы ее выполнили:
window.myvar = "whatever";
Предположим, что у нас нет глобальной переменной типа myundefined
, что означает, что window.myundefined
не существует, а window.myundefined
не имеет значения, это означает, что window.myundefined
действительно undefined
, тогда вы можете создать глобальный переменную с именем undefined
в области вашего окна, например:
window.undefined = window.myundefined
и эта строка имеет тот же результат, что и код jQuery, который вы упомянули выше. Другими словами, jQuery мог бы сделать то же самое с этим кодом:
window.undefined = window.myundefined
или
window.undefined = window.whatever_you_want_with_no_value
оба определяют глобальную переменную без значения.