Я натрапив на такий код:
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, порожній рядок, порожній масив і (?) Об'єкт без властивостей відповідає значенню БРЕХНЯ, інше правда.