Я наткнулся на следующий код:
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
.
В: Я правильно понимаю?
Я пробовал в консоли 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)
. Это мнемонический способ Javascript проверить, истинна ли переменнаяdata
.undefined
,null
, false, 0, пустая строка, пустой массив и (?) Объект без свойств оценивается как false, остальное истинно. - person J0HN   schedule 21.05.2013if(data)
означало бы, что он не может передаватьfalse
или0
в качестве значений дляdata
. - person techfoobar   schedule 21.05.2013if(typeof someUndefVar == whatever) -- works
иif(someUnderVar) -- error
. - person afsantos   schedule 21.05.2013data !== null && data !== undefined
, что эквивалентноdata != null
, что эквивалентноdata != undefined
. Первая форма, как правило, предпочтительнее, поскольку она более четко описывает условия, тогда как было бы легко упустить из виду, что иnull
, иundefined
проверяются с двумя последними условиями. - person zzzzBov   schedule 21.05.2013undefined
- это ИМО запах кода. Это не защищенное ключевое слово, такое какnull
, это переменная, которая не определена. Это полностью верно и нарушит ваш код:undefined = 1
- person Izkata   schedule 21.05.2013undefined
, так как он действительно может быть определен, как вы указываете. С тех пор я стараюсь избегать упоминанияundefined
где-либо в моем коде, а при необходимости просто используюtypeof
или== null
. - person afsantos   schedule 21.05.2013Boolean({})
иBoolean([])
верны. - person Jim Jones   schedule 18.07.2015