Я наткнулся на следующий код:
function test(data) {
if (data != null && data !== undefined) {
// some code here
}
}
Я немного новичок в JavaScript, но из других вопросов, которые я читал здесь, у меня сложилось впечатление, что этот код не имеет особого смысла.
Вы получите ошибку, если получите доступ к неопределенной переменной в любом контексте, кромеtypeof
.
Обновление: ответ (цитата) выше может вводить в заблуждение. Он должен сказать «необъявленная переменная» , а не «неопределенная переменная» .
Как я выяснил, в ответах на Райана ♦ , maerics и nwellnhof , даже когда в функцию не передаются аргументы, ее переменные для аргументов всегда объявляются. Этот факт также доказывает неправильность первого пункта в списке ниже.
Насколько я понимаю, могут возникнуть следующие сценарии:
Функция была вызвана без аргументов, создаваяdata
неопределенную переменную и вызывая ошибкуdata != null
.Функция была вызвана специально с
null
(илиundefined
) в качестве аргумента, и в этом случаеdata != null
уже защищает внутренний код, что делает его&& data !== undefined
бесполезным.Функция была вызвана с ненулевым аргументом, в этом случае она будет тривиально передавать
data != null
иdata !== undefined
.
Q: мое понимание верно?
Я попробовал следующее в консоли Firefox:
--
[15:31:31.057] false != null
[15:31:31.061] true
--
[15:31:37.985] false !== undefined
[15:31:37.989] true
--
[15:32:59.934] null != null
[15:32:59.937] false
--
[15:33:05.221] undefined != null
[15:33:05.225] false
--
[15:35:12.231] "" != null
[15:35:12.235] true
--
[15:35:19.214] "" !== undefined
[15:35:19.218] true
Я не могу понять случай, когда data !== undefined
после data != null
может быть какой-либо пользы.
if(data)
будет означать, что он не может передать false
или в 0
качестве значения для data
.
if(typeof someUndefVar == whatever) -- works
и if(someUnderVar) -- error
.
data !== null && data !== undefined
, что эквивалентно тому, data != null
что эквивалентно data != undefined
. Первая форма имеет тенденцию быть предпочтительной, так как она более четко описывает условия, в то время как было бы легко пропустить оба этих условия null
и undefined
проверяться с последующими двумя условиями.
undefined
IMO - это запах кода. Это не защищенное ключевое слово null
, а переменная, которая не определена. Это полностью допустимо и нарушит ваш код:undefined = 1
if (data)
. Это мнемонический способ Javascript, чтобы проверить,data
оценивает ли переменная значение true.undefined
,null
false, 0, пустая строка, пустой массив и (?) объект без свойств оценивается как false, остальное - true.