При проверке неопределенности в Javascript я должен использовать! = Или! ==? - PullRequest
0 голосов
/ 25 января 2020

Когда я хочу убедиться, что переменная x определена, перед ее использованием я использую:

if (typeof x !== "undefined") {
    // do stuff with x
}

, но я заметил, что другие, например, в этом вопросе , используйте !== вместо != для сравнения. Какой из них мне следует использовать и почему?

Примечание: я понимаю, что я могу использовать !==. Вопрос в том, должен ли я (и будет ли какое-либо различие в поведении).

Ответы [ 2 ]

2 голосов
/ 25 января 2020

Как отмечается в комментарии VLAZ, оператор typeof гарантированно возвращает строку. Если вы сравните результат с другой строкой, то == и === (или != и !==) сделают то же самое.

0 голосов
/ 25 января 2020

на самом деле, лучший подход - проверить, является ли значение falsy, и на основе MDN это список ложных значений:

  • false Ключевое слово false
  • 0 Нулевое число
  • 0n BigInt, при использовании в качестве логического значения, следует тому же правилу, что и Number. 0n это ложь. "", '', ``
  • Это пустая строка (длина строки равна нулю). Строки в JavaScript могут быть определены с помощью двойных кавычек "", одинарных кавычек '' или литералов шаблона ``.

  • null null - отсутствие любого значения

  • undefined undefined - значение примитива
  • NaN NaN - не число

, поэтому в зависимости от кода вы можете просто:

if (!x) { // check for all the falsy values.
    // do stuff with x
}

с другой стороны, вы спрашиваете разницу != и !==, хорошо взяв несколько примеров, вы можете увидеть разницу:

0 == false   // true, because false is equivalent of 0

0 === false  // false, because both operands are of different type

2 == "2"     // true, auto type coercion, string converted into number

2 === "2"    // false, since both operands are not of same type

, как упомянуто в комментарии @VLAZ, эти случаи будет работать, только если переменная x определена, в противном случае у вас будет следующая ошибка:

"Uncaught ReferenceError: x не определено"

, поэтому на вашем В этом случае вы можете использовать только !=, потому что вы будете сравнивать string с string и вам не придется проверять, была ли переменная создана или нет.

if (typeof x != "undefined") {
    // do stuff with x
}
...