Як перевірити змінну , якщо вона
null
абоundefined
і те , що різниця міжnull
іundefined
?У чому різниця між
==
і===
(важко шукати в Google "===")?
Як перевірити змінну , якщо вона null
або undefined
і те , що різниця між null
і undefined
?
У чому різниця між ==
і ===
(важко шукати в Google "===")?
Відповіді:
Як перевірити змінну , якщо це
null
абоundefined
...
Чи є змінною null
:
if (a === null)
// or
if (a == null) // but see note below
... але зауважте, що останнє також буде правдивим, якщо a
є undefined
.
Це undefined
:
if (typeof a === "undefined")
// or
if (a === undefined)
// or
if (a == undefined) // but see note below
... але ще раз зауважте, що останній розпливчастий; це також буде правдою, якщо a
є null
.
Тепер, незважаючи на вищезазначене, звичайний спосіб перевірити їх - використовувати той факт, що вони фальсифікують :
if (!a) {
// `a` is falsey, which includes `undefined` and `null`
// (and `""`, and `0`, and `NaN`, and [of course] `false`)
}
Це визначено ToBoolean у специфікації.
... і в чому різниця між
null
іundefined
?
Вони обидва значення зазвичай використовуються для позначення відсутності чогось. undefined
є більш загальним, використовуваним як значення за замовчуванням змінних, поки їм не буде призначено якесь інше значення, як значення аргументів функції, які не були надані під час виклику функції, і як значення, яке ви отримуєте, коли запитуєте об'єкт для власності, якої він не має. Але він також може бути явно використаний у всіх цих ситуаціях. (Існує різниця між об'єктом, який не має властивості, і властивістю зі значенням undefined
; є різниця між викликом функції зі значеннямundefined
для аргументу та цілком відключеним аргументом.)
null
дещо конкретніше, ніж undefined
: Це пустий посилання на об'єкт. Звичайно, JavaScript вводиться неважливо, але не всі речі, з якими JavaScript взаємодіє, є набраними. Якщо такий API, як DOM у браузерах, потребує порожньої посилання на об'єкт, ми використовуємо null
, не undefined
. Аналогічно, getElementById
операція DOM повертає посилання на об'єкт - чи дійсну (якщо вона знайшла елемент DOM), або null
(якщо вона не була).
Цікаво (чи ні), що вони є власними типами. Що означає, null
це єдине значення типу Null і undefined
є єдиним значенням у типі Undefined.
Яка різниця між "==" та "==="
Єдина відмінність між ними полягає в тому, що ==
буде вводити примус, щоб спробувати зрівняти значення, а ===
не буде. Так, наприклад "1" == 1
, правда, тому що "1"
примушує до1
. Але "1" === 1
це помилково , оскільки типи не відповідають. ( "1" !== 1
вірно.) Першим (реальним) кроком ===
є "Чи типи операндів однакові?" і якщо відповідь "ні", результат є false
. Якщо типи однакові, він робить саме те, що==
робить.
Типовий примус використовує досить складні правила і може мати дивовижні результати (наприклад, "" == 0
це правда).
Детальніше в специфікації:
==
також називається "вільною" рівністю)===
)if (a) { ... }
означатиме "якщо a
є truthy", де "truthy" - значення, яке не є нулем, не має значення, не визначається, не відповідає помилці, не містить порожнього рядка. :-)
null
це не об'єкт , це посилання на об'єкт, що означає "немає об'єкта". Це важливо, адже це те, що використовується з наданими хостом інтерфейсами, коли вони надають посилання на об'єкти, але не мають їх надати (наприклад, node.nextSibling
коли node
останній елемент у його батьківському або getElementById
коли немає елемента з цим ідентифікатором). Технологія, яку хост використовує для цього, може бути не такою гнучкою, оскільки JavaScript стосується типів змінних / властивостей, тому потрібно було мати null
ref-ref (на відміну від undefined
).
typeof null
повернення "об'єкта" має сенс. Єдине інше значення, яке мало б сенс, було б "null", оскільки воно, безумовно, повинно повернути щось інше від typeof undefined
. null являє собою посилання на null об'єкт, що, принаймні, означає, що змінна, утримує його, призначена для певного типу "об'єкта". Якщо це була помилка, то це була гарна помилка. У будь-якому випадку, стосовно відповіді, підказку про undefined
! == undefined
під час перехресних сценаріїв добре знати, особливо для налагодження.
Різниця тонка.
У JavaScript undefined
змінна - це змінна, яка як ніколи не була оголошена або ніколи не присвоювала значення. Скажімо, ви заявляєте, var a;
наприклад, тоді a
будеundefined
, тому що ніколи не було призначено жодного значення.
Але якщо потім призначити, a = null;
то a
тепер буде null
. У JavaScript null
- об’єкт (спробуйте typeof null
в консолі JavaScript, якщо ви мені не вірите), це означає, що null - це значення (насправді навітьundefined
це значення).
Приклад:
var a;
typeof a; # => "undefined"
a = null;
typeof null; # => "object"
Це може виявитися корисним у аргументах функцій. Ви можете мати значення за замовчуванням, але вважати нуль прийнятним. У такому випадку ви можете:
function doSomething(first, second, optional) {
if (typeof optional === "undefined") {
optional = "three";
}
// do something
}
Якщо ви опустите optional
параметр, doSomething(1, 2) then
необов’язковим буде "three"
рядок, але якщо ви перейдете, doSomething(1, 2, null)
то необов'язковим будеnull
.
Що стосується рівних ==
і строго рівних ===
компараторів, то перший - слабкого типу, тоді як строго рівний також перевіряє тип значень. Це означає, що 0 == "0"
повернеться правдою; поки 0 === "0"
поверне помилкове значення, оскільки число не є рядком.
Ви можете використовувати ці оператори , щоб перевірити між . Наприклад:undefined
null
null === null # => true
undefined === undefined # => true
undefined === null # => false
undefined == null # => true
Останній випадок цікавий тим, що дозволяє перевірити, чи змінна або не визначена, або нульова, і нічого іншого:
function test(val) {
return val == null;
}
test(null); # => true
test(undefined); # => true
Специфікація - це місце, де можна отримати повні відповіді на ці питання. Ось підсумок:
x
можна:null
шляхом прямого порівняння, використовуючи===
. Приклад:x === null
undefined
за допомогою двох основних методів: прямого порівняння з undefined
або typeof
. З різних причин я віддаю перевагуtypeof x === "undefined"
.null
і undefined
, використовуючи ==
та покладаючись на злегка таємні правила примусу, які означають, x == null
робить саме те, що ви хочете.==
і ===
полягає в тому, що якщо операнди різного типу, ===
вони завжди повернуться, false
тоді як ==
перетворять один або обидва операнди в один і той же тип, використовуючи правила, що призводять до деякої трохи неінтуїтивної поведінки. Якщо операнди одного типу (наприклад, обидва є рядками, такими як у typeof
порівнянні вище), ==
і ===
будуть вести себе абсолютно однаково.Більше читання:
Як перевірити змінну, якщо вона є нульовою чи невизначеною
просто перевірте, чи має змінна дійсне значення, як це:
if(variable)
він повернеться істинним, якщо змінна не містить:
невизначений
Це означає, що змінна ще не використовується.
Приклад:
var x;
if(x){ //you can check like this
//code.
}
дорівнює (==)
Це лише контрольне значення дорівнює не типу даних.
Приклад:
var x = true;
var y = new Boolean(true);
x == y ; //returns true
Тому що він перевіряє лише значення.
Строгі рівні (===)
Перевірки значення та типу даних повинні бути однаковими.
Приклад:
var x = true;
var y = new Boolean(true);
x===y; //returns false.
Оскільки він перевіряє тип даних x - примітивний тип, y - бульний об'єкт.
Оголошення 1. null
не є ідентифікатором властивості глобального об'єкта, як undefined
може бути
Оголошення 2. ===
Контрольні значення та типи. До ==
порівняння (використання .valueOf()
та .toString()
) не потрібно вимагати однакових типів і здійснювати неявну конверсію . Тут у вас є всі ( src ):
якщо
== (його заперечення ! = )
=== (його заперечення ! == )
document.all == null
іdocument.all !== null
Якщо ваша (логічна) перевірка має заперечення (!), І ви хочете захопити як JS, так null
і undefined
(оскільки різні браузери дадуть вам різні результати), ви використовуєте менш обмежувальне порівняння: наприклад:
var ItemID = Item.get_id();
if (ItemID != null)
{
//do stuff
}
Це охопить і те, null
іundefined
Спробуйте з різною логікою . Ви можете використовувати наступний код для перевірки всіх чотирьох (4) умов для перевірки, як не null, not blank, not undefined and not zero, використовуйте лише цей код (! (! (Змінна))) у javascript та jquery.
function myFunction() {
var data; //The Values can be like as null, blank, undefined, zero you can test
if(!(!(data)))
{
//If data has valid value
alert("data "+data);
}
else
{
//If data has null, blank, undefined, zero etc.
alert("data is "+data);
}
}
==
і===
тут добре описана .