Як перевірити, чи змінна не є нульовою?


285

Я знаю, що нижче є два способи в JavaScript, щоб перевірити, чи не є змінною null, але я розгублений, яка найкраща практика для використання.

Чи варто робити:

if (myVar) {...}

або

if (myVar !== null) {...}

Відповіді:


399

Вони не рівнозначні. Перший буде виконувати блок, наступний за ifтвердженням, якщо він myVarє truthy (тобто оцінюється trueяк умовний), а другий буде виконувати блок, якщо myVarє якесь значення, відмінне від null.

Єдиними значеннями, які не є надійними в JavaScript, є такі (також фальшиві значення):

  • null
  • undefined
  • 0
  • "" (порожній рядок)
  • false
  • NaN

69

Ось як можна перевірити, чи змінна не NULL:

if (myVar !== null) {...}

блок буде виконуватися , якщо MYVAR не порожній .. це буде виконуватися , якщо MYVAR не визначене або хибним або 0або NaNабо що - небудь ще ..


1
На випадок тих, хто цікавиться ... Це не перевіряється на порожній рядок ("")та невизначений. Дивіться мою загадку
Barrosy

47

Прочитайте у цьому дописі: http://enterprisejquery.com/2010/10/how-good-c-habits-can-encourage-bad-javascript-habits-part-2/

У ньому є декілька приємних порад щодо JavaScript в цілому, але одне, що він згадує, - це те, що ви повинні перевірити наявність нуля, як:

if(myvar) { }

Він також згадує те, що вважається "фальсифіком", що ви можете не усвідомлювати.


33
Ця перевірка насправді не є безпечною. Якщо myvar 0, помилкове або будь-яке інше хибне значення, тест не вдасться (якщо ви лише маєте намір перевірити, чи немає нуля). Тому використовуйте це лише для того, щоб перевірити наявність недійсності, якщо змінна ніколи не може мати іншого фальшивого значення.
Werzi2001

2
посилання більше не працює. Тут я знайшов копію того, що видається публікацією: appendto.com/2010/10/… Це дивно, адже публікація Іллі (та зразок коду) підказує, що він автор, але він не вказаний як автор ...
thepaulpage

2
Схоже, цього сайту вже немає. Було б корисно, якщо ви могли б включити інформацію в саму публікацію, а не просто зовнішнє посилання.
apraetor

Це не працюватиме, якщо значення присутнє, але дорівнює 0 (нуль)
zmechanic

15
  • код всередині вашої if(myVar) { code }НЕ буде виконуватися лише тоді, коли myVarдорівнює: false, 0, "", null, undefined, NaNабо ви ніколи не визначили змінну myVar(тоді додатково код зупиняє виконання та викидає виняток).
  • код всередині вашої if(myVar !== null) {code}НЕ буде виконуватися лише тоді, коли myVarвін дорівнює nullабо ви його ніколи не визначали (кидає виняток).

Тут у вас є все ( src )

якщо

введіть тут опис зображення

== (його заперечення ! = )

введіть тут опис зображення

=== (його заперечення ! == )

введіть тут опис зображення


9

Є ще один можливий сценарій, який я щойно зіткнувся.

Я здійснив дзвінок в Ajax і повернув дані як null, у строковому форматі. Мені довелося це перевірити так:

if(value != 'null'){}

Отже, null був рядком, який читав "null", а не насправді null.

EDIT: Слід розуміти, що я продаю це не так, як це слід робити. У мене був сценарій, коли це було єдиним способом зробити це. Я не впевнений, чому ... можливо, хлопець, який написав бек-енд, подав дані неправильно, але незалежно, це справжнє життя. Розчаровувати це заперечуючим голосом хтось, хто розуміє, що це не зовсім правильно, а потім хтось, хто це насправді допомагає, засмучує.


Швидше проаналізуйте свою вартість, ніж порівнюйте зі nullструнами.
Бергі

1
Ця відповідь є законною, незалежно від того, чи розумієте ви її застосування. Я не ціную те, що мене оприлюднили за публікацію речей, які насправді працювали. Ви помічали, що він отримав відгук перед тим, як торкнутися його? Це тому, що це реальний сценарій.
Плоский кіт

3
так, і я подав заяву, оскільки вважаю, що це неправильне рішення. У випадку з викликом аякса вам краще зробити, value = JSON.parse(value)а потім скористатися простим і правильним value != nullтестом
Бергі

2
Мабуть, ти не розумієш. Я розумію, ти думаєш, що ти робиш, але ти цього не робиш.
Плоский кіт

4
Я розумію, що це було робоче рішення. Але я не вважаю, що це гарна порада, тому, будь ласка, поважайте мою заяву.
Бергі


1

Іноді, якщо це навіть не було визначено, краще бути готовим. Для цього я використовував typeof

if(typeof(variable) !== "undefined") {
    //it exist
    if(variable !== null) {
        //and is not null
    }
    else {
        //but is null
    }
}
else {
    //it doesn't
}

-4

Дві умовні заяви, які ви перераховуєте тут, не кращі один за одного. Ваше використання залежить від ситуації. У вас є друкарська помилка, до речі, у 2-му прикладі. Після знака оклику повинен бути лише один знак рівності.

Перший приклад визначає, чи є значення в myVar істинним, і виконує код всередині {...}

Другий приклад оцінює, якщо myVar не дорівнює нулю, і якщо цей випадок є істинним, він виконає ваш код всередині {...}

Я пропоную ознайомитись із умовними твердженнями для отримання більшої кількості прийомів. Ознайомившись з ними, ви можете вирішити, коли вони вам потрібні.


12
Це, мабуть, не є друкарським помилкою у другому прикладі. Ця секунда =є вирішальною і має величезне значення у питанні. Можливо, ви не знаєте про існування !==та ===операторів у JavaScript?
Тім Даун

1
Дякуємо, що вказали на це. Я одразу подумав, що це помилка, але тепер пригадаю те, про що я не бачив давно і про що забув.
ДОКТОР
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.