ES2015/2016 способ 'typeof varName === 'undefined`?

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

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

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

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

2 ответа

Решение

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

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

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

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

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

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

  • varName === void 0

    Это обнаружит ли varName не определено

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

  • varName === undefined

    Это должно обнаружить, varName не определено

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

  • varName == null

    Это обнаружит ли varName не определено или равно нулю.

  • !varName

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

Другие вопросы по тегам