ES2015/2016 путь 'typeof varName ===' undefined `?
Я сейчас валяю в ES2015 + роскошь с несколькими проектами и задаюсь вопросом, могу ли я избавиться от сильно ненавистного костыля, чтобы проверить undefined
в новой стране чудес.
Есть ли более короткий, но все же точный способ для typeof varName === 'undefined'
в ES2015 +?
Конечно, я мог бы использовать параметры по умолчанию, но это также похоже на ненужное назначение.
function coolFn(a = null){
if (a===null) console.log("no a supplied");
}
Ответы
Ответ 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).