typeof! == & ldquo; undefined & rdquo; против! = ноль

Похоже, у вас нет всех необходимых частей для npm для работы в Windows. Попробуйте сделать «npm install --global windows-build-tools», и как только это будет сделано, перезапустите «npm install». Для получения дополнительной информации см. https://www.npmjs.com/package/windows-build-tools

Arnaud

465
задан WoIIe 23 August 2013 в 11:45
поделиться

5 ответов

typeof более безопасен, поскольку позволяет идентификатору никогда не объявляться раньше:

if(typeof neverDeclared === "undefined") // no errors

if(neverDeclared === null) // throws ReferenceError: neverDeclared is not defined
685
ответ дан 22 November 2019 в 22:50
поделиться

Тебе не стоит беспокоиться о переименовании undefined. Если кто-то переименует undefined, у вас будет гораздо больше проблем, чем с несколькими, если проверки не пройдены. Если вы действительно хотите защитить свой код, оберните его в IFFE (немедленно вызванное выражение функции) следующим образом:

(function($, Backbone, _, undefined) {
    //undefined is undefined here.
})(jQuery, Backbone, _);

Если вы работаете с глобальными переменными (что уже неправильно) в среде браузера Я бы проверил неопределенность следующим образом:

if(window.neverDefined === undefined) {
    //Code works
}

Поскольку глобальные переменные являются частью объекта окна, вы можете просто проверить неопределенность вместо приведения к строке и сравнения строк.

Кроме того, почему ваши переменные не определены? Я видел много кода, где они проверяют существование переменных и выполняют некоторые действия, основанные на этом. Ни разу я не видел, где этот подход был правильным.

12
ответ дан Peeter 23 August 2013 в 11:45
поделиться

Если переменная объявлена ​​(либо с ключевым словом var , как аргумент функции, либо как глобальная переменная), я думаю, что лучший способ сделать это:

if (my_variable === undefined)

jQuery делает это, поэтому для меня этого достаточно: -)

В противном случае вам придется использовать typeof , чтобы избежать ReferenceError .

Если вы ожидаете, что undefined будет переопределено, вы можете обернуть свой код следующим образом:

(function(undefined){
    // undefined is now what it's supposed to be
})();

Или получить его с помощью оператора void :

const undefined = void 0;
// also safe
48
ответ дан 22 November 2019 в 22:50
поделиться

Если вас действительно беспокоит переопределение undefined, вы можете защитить от этого вспомогательный метод вроде этого:

function is_undefined(value) {
   var undefined_check; // instantiate a new variable which gets initialized to the real undefined value
   return value === undefined_check;
}

Это работает, потому что когда кто-то пишет undefined = "foo" он позволяет только name undefined ссылаться на новое значение, но не изменяет фактическое значение undefined .

5
ответ дан 22 November 2019 в 22:50
поделиться
if (input == undefined) { ... }

работает нормально. Конечно, это не сравнение null , но я обычно нахожу, что если мне нужно различать undefined и null , мне на самом деле нужно различать undefined и любое ложное значение, поэтому

else if (input) { ... }

делает это.

Если программа переопределяет undefined , она в любом случае бессмысленна.

Единственная причина, по которой я могу думать, это совместимость с IE4, он не понимал ключевое слово undefined (которое, к сожалению, не является ключевым словом), но, конечно, значения могли быть undefined , поэтому у вас должно быть следующее:

var undefined;

, и приведенное выше сравнение будет работать нормально.

Во втором примере вам, вероятно, понадобятся двойные круглые скобки, чтобы сделать lint счастливым?

-7
ответ дан 22 November 2019 в 22:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: