Я наткнулся на следующий код:
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проверяться с последующими двумя условиями.
undefinedIMO - это запах кода. Это не защищенное ключевое слово null, а переменная, которая не определена. Это полностью допустимо и нарушит ваш код:undefined = 1



if (data). Это мнемонический способ Javascript, чтобы проверить,dataоценивает ли переменная значение true.undefined,nullfalse, 0, пустая строка, пустой массив и (?) объект без свойств оценивается как false, остальное - true.