JSLint жалуется на переопределение undefined

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"; Я просто хотел понять, почему этот метод не работает.

Ответ 1

Ваш метод работает. Просто потому, что JSLint не нравится, это не делает его кардинальным грехом.

Попробуйте JSHint вместо этого (для большего удобства).

Ответ 2

'undefined' был объявлен неизменяемым свойством глобального объекта в ECMA-262 Edition 5 Section 15.1.1.3, опубликованном в декабре 2009 года.

Используя 'undefined' в качестве имени параметра в функции, вы пытаетесь изменить его на все, что передается функции. Таким образом, технически ошибка заключается в том, что браузеры медленно принимают стандарт, а JSLint верен.

Ответ 3

(function() { var undefined = 'foo'; console.log(undefined, typeof undefined); })();

Согласно MDN, это на самом деле не зарезервированное слово в JavaScript и может быть переопределено.

Ответ 4

undefined - зарезервированное слово. Это похоже на попытку назвать переменную false или true. Ваше значение, которое вы передаете в свою функцию:

function(undefined) {...}

нужно назвать что-то другое, например

function(myVariable) {...}

UPDATE

Похоже, что он не может быть зарезервирован как Я изначально читал, но, возможно, это просто термин, который, по мнению JSLint, должен быть зарезервирован...