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, ложь).