Ответ 1
Ваш метод работает. Просто потому, что JSLint не нравится, это не делает его кардинальным грехом.
Попробуйте JSHint вместо этого (для большего удобства).
undefined
технически можно переопределить, поэтому это не зарезервированное слово. В результате я обычно пишу код в анонимной функции, которая заставляет undefined
быть переменной undefined так:
(function (undefined) {
"use strict";
var o = {
test: "testvalue"
};
if (o.test === undefined) {
// Do stuff here
} else {
// Do other stuff there
}
}());
Однако JSLint упоминает следующую ошибку:
Problem at line 1 character 15: Expected an identifier and instead saw 'undefined' (a reserved word).
Почему JSLint жалуется на undefined
как зарезервированное слово, когда код может произвольно переопределить переменную? Я знаю, что вы можете использовать typeof x === "undefined"
; Я просто хотел понять, почему этот метод не работает.
Ваш метод работает. Просто потому, что JSLint не нравится, это не делает его кардинальным грехом.
Попробуйте JSHint вместо этого (для большего удобства).
'undefined' был объявлен неизменяемым свойством глобального объекта в ECMA-262 Edition 5 Section 15.1.1.3, опубликованном в декабре 2009 года.
Используя 'undefined' в качестве имени параметра в функции, вы пытаетесь изменить его на все, что передается функции. Таким образом, технически ошибка заключается в том, что браузеры медленно принимают стандарт, а JSLint верен.
(function() { var undefined = 'foo'; console.log(undefined, typeof undefined); })();
Согласно MDN, это на самом деле не зарезервированное слово в JavaScript и может быть переопределено.
undefined
- зарезервированное слово. Это похоже на попытку назвать переменную false
или true
. Ваше значение, которое вы передаете в свою функцию:
function(undefined) {...}
нужно назвать что-то другое, например
function(myVariable) {...}
UPDATE
Похоже, что он не может быть зарезервирован как Я изначально читал, но, возможно, это просто термин, который, по мнению JSLint, должен быть зарезервирован...