Я натрапив на такий код:
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)
означатиме, що він не може передавати false
або 0
як значення для data
.
if(typeof someUndefVar == whatever) -- works
і if(someUnderVar) -- error
.
data !== null && data !== undefined
, що еквівалентно тому, data != null
що рівнозначно data != undefined
. Колишня форма має перевагу, оскільки вона більш чітка щодо умов, тоді як було б легко не помітити, що обидва null
та undefined
перевіряються з двома останніми умовами.
undefined
ІМО - це кодовий запах. Це не захищене ключове слово типу null
, це змінна, яка, як правило, не визначена. Це цілком дійсно і порушить ваш код:undefined = 1
if (data)
. Це мнемічний Javascript спосіб перевірити, чиdata
змінна оцінюється як істина.undefined
,null
, Брехня, 0, порожній рядок, порожній масив і (?) Об'єкт без властивостей відповідає значенню БРЕХНЯ, інше правда.