Подтвердить что ты не робот

ES2015/2016 путь 'typeof varName ===' undefined `?

Я сейчас валяю в ES2015 + роскошь с несколькими проектами и задаюсь вопросом, могу ли я избавиться от сильно ненавистного костыля, чтобы проверить undefined в новой стране чудес.

Есть ли более короткий, но все же точный способ для typeof varName === 'undefined' в ES2015 +?

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

function coolFn(a = null){
   if (a===null) console.log("no a supplied");
}
4b9b3361

Ответ 1

Просто проверьте varName === undefined.

В более старых браузерах было возможно назначить альтернативное значение глобальной переменной undefined, которая приведет к сбою теста, но в ES2015 + теперь невозможно.

Обратите внимание, что нет возможности различать явно пропускание undefined как параметра, выходящего за пределы всего параметра, за исключением просмотра arguments.length.

Ответ 2

Единственный случай, когда typeof varName === 'undefined' полезен, - это когда вы не знаете, была ли объявлена ​​переменная varName.

И ИМО, если вы не знаете, объявлены ли ваши переменные, ваш код имеет серьезные проблемы.

В других случаях у вас есть лучшие варианты:

  • varName === void 0

    Это определит, является ли varName undefined.

    void - это оператор, который получает аргумент (вы можете использовать что угодно вместо 0) и возвращает undefined.

  • varName === undefined

    Это должно определить, является ли varName undefined.

    Однако помните, что глобальный undefined мог быть перезаписан (до ES5) или затенен другим значением. Поэтому я предпочитаю void, что также короче.

  • varName == null

    Это определит, является ли varName undefined или имеет значение null.

  • !varName

    Это определит, является ли varName ложным (undefined, null, 0, пустая строка, NaN, false).