JSLint жалуется на переопределение неопределенного - PullRequest
5 голосов
/ 18 ноября 2011

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

Ответы [ 4 ]

17 голосов
/ 24 августа 2012

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

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

5 голосов
/ 18 ноября 2011

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

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

0 голосов
/ 12 апреля 2019
(function() { var undefined = 'foo'; console.log(undefined, typeof undefined); })();

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

0 голосов
/ 18 ноября 2011

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

function(undefined) {...}

должно быть названо как-то еще, например

function(myVariable) {...}

ОБНОВЛЕНИЕ

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

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