web-dev-qa-db-ja.com

JavaScriptがnullと未定義をチェックし、==と===の違い

私は知っている、私はこのトピックをカバーするいくつかのスレッドがなければならないことを知っている。しかし、私は検索を使用し、私のニーズに合った答えを得られませんでした。だからここに行きます:

  1. 変数がnullまたはundefinedである場合、どうやって変数をチェックしますか。また、nullundefinedの違いは何ですか?

  2. =====の違いは何ですか(Googleで「===」を検索するのは困難です)。

525
MUG4N

変数がnullまたはundefined..の場合、どうすれば変数をチェックできますか。

変数nullは次のとおりです。

if (a === null)
// or
if (a == null) // but see note below

...しかし、aundefinedであれば、後者も当てはまります。

それはundefinedです:

if (typeof a === "undefined")
// or
if (a === undefined)
// or
if (a == undefined) // but see note below

...しかし、最後のものはあいまいです。 anullの場合も同様です。

さて、上記にもかかわらず、 いつもの これらをチェックする方法は、それらがfalseyであるという事実を使うことです:

if (!a) {
    // `a` is falsey, which includes `undefined` and `null`
    // (and `""`, and `0`, and `NaN`, and [of course] `false`)
}

これは仕様の ToBoolean で定義されています。

... nullundefinedの違いは何ですか?

それらは両方とも、何かが存在しないことを示すために通常使用される値です。 undefinedはもっと一般的なもので、他の値が割り当てられるまで変数のデフォルト値として、関数が呼び出されたときには提供されなかった関数引数の値として、そしてあなたが尋ねたときに得られる値として使われます。所有していないプロパティのオブジェクト。しかし、それはこれらの状況のすべてで明示的に使用することもできます。 (プロパティを持たないオブジェクトと値undefinedを持つプロパティを持つオブジェクトとの間には違いがあります。引数に対して値undefinedを持つ関数を呼び出すことと、その引数を完全にオフにすることとの間には違いがあります。)

nullundefinedよりもわずかに具体的です。空白のオブジェクト参照です。もちろん、JavaScriptは大まかに型付けされていますが、JavaScriptが相互作用することのすべてが大まかに型付けされているわけではありません。ブラウザのDOMのようなAPIが空白のオブジェクト参照を必要とする場合は、nullではなくundefinedを使用します。そして同様に、DOMのgetElementById操作はオブジェクト参照を返します - 有効なもの(DOM要素が見つかった場合)またはnull(見つからなかった場合)のいずれかです。

興味深いことに(あるいはそうではない)、それらは自分のタイプです。つまり、nullがNull型の唯一の値で、undefinedがUndefined型の唯一の値です。

"=="と "==="の違いは何ですか

唯一の違いは、==は値を一致させるために型強制を行い、===は一致しないことです。 "1" == 1"1"に強制変換するので、たとえば1はtrueです。しかし"1" === 1falseです。型が一致しないからです。 ("1" !== 1は真です。)===の最初の(本当の)ステップは、「オペランドのタイプは同じですか?」です。答えが "no"の場合、結果はfalseです。型が同じであれば、==の動作とまったく同じです。

型強制は非常に複雑な規則を使用し、驚くべき結果をもたらすことがあります(例えば、"" == 0はtrueです)。

仕様の詳細:

863
T.J. Crowder

違いは微妙です。

JavaScriptでは、undefined変数は、宣言されていない、または値が割り当てられていない変数です。例えばvar a;を宣言したとしましょう。そしてaは決して値を割り当てられなかったのでundefinedになります。

しかしa = null;を代入すると、anullになります。 JavaScriptではnullはオブジェクトです(信じられない場合はJavaScriptコンソールでtypeof nullを試してください)。これはnullが値であることを意味します(実際にはundefinedも値です)。

例:

var a;
typeof a;     # => "undefined"

a = null;
typeof null;  # => "object"

これは関数の引数には便利です。デフォルト値を使用することをお勧めしますが、許容できるものとしてnullを検討してください。その場合は、次のようにします。

function doSomething(first, second, optional) {
    if (typeof optional === "undefined") {
        optional = "three";
    }
    // do something
}

optionalパラメータを省略するとdoSomething(1, 2) thenoptionalは"three"文字列になりますが、doSomething(1, 2, null)を渡すとオプションはnullになります。

等しい==および厳密に等しい===コンパレータに関しては、最初のものは弱い型ですが、厳密に等しい場合は値の型もチェックします。これは0 == "0"がtrueを返すことを意味します。数値は文字列ではないため、0 === "0"はfalseを返します。

これらの演算子を使ってundefinednullをチェックすることができます。例えば:

null === null            # => true
undefined === undefined  # => true
undefined === null       # => false
undefined == null        # => true

最後のケースは、変数が未定義であるかnullであるか、そしてそれ以外に何もないかをチェックすることができるので興味深いものです。

function test(val) {
    return val == null;
}
test(null);       # => true
test(undefined);  # => true
88

仕様 は、これらの質問に対する完全な回答を得るための場所です。概要は次のとおりです。

  1. 変数xには、次のことができます。

    • ===を使用した直接比較によって、nullかどうかを確認してください。例:x === null
    • 2つの基本的な方法のどちらかでundefinedをチェックしてください:undefinedまたはtypeofとの直接比較。 さまざまな理由で 、私はtypeof x === "undefined"を好みます。
    • ==を使用し、x == nullが厳密にあなたが望むことを意味するというやや難解な型強制規則に頼って、それがnullundefinedのどちらであるかをチェックしてください。

  2. =====の基本的な違いは、オペランドが異なる型の場合、===は常にfalseを返すのに対し、==rules を使用して一方または両方のオペランドを同じ型に変換することです。オペランドが同じ型の場合(例えば、上記のtypeofの比較のように両方とも文字列の場合)、=====はまったく同じように動作します。

もっと読む:

15
Tim Down

未定義

それは変数がまだ初期化されていないことを意味します。

例:

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はブールオブジェクトです。

8
kannanrbk

Nullまたは未定義の変数をチェックする方法

変数が次のような有効な値を持っているかどうかを確認してください。

if(variable)

変数が含まれていない場合はtrueを返します。

  • ヌル
  • undefined
  • false
  • ""(空の文字列)
  • NaN
4
Sumit Joshi

(論理的な)チェックが否定(!)で、JSのnullundefinedの両方をキャプチャしたい場合は(ブラウザの種類によって結果が異なるため)、制限の少ない比較を使用してください。

var ItemID = Item.get_id();
if (ItemID != null)
{
 //do stuff
}

これはnullundefinedの両方をキャプチャします

1
DaniDev

Null、null、未定義、0以外の検証用の4つすべての条件をチェックするための以下のコードを使用できます。このコード(!(!(variable)))は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);
}

}

0
Ravikant

Ad1。nullは、undefinedの場合もあります のように、グローバルオブジェクトのプロパティの識別子ではありません。

let x;      // undefined
let y=null; // null
let z=3;    // has value
// 'w'      // is undeclared

if(!x) console.log('x is null or undefined');
if(!y) console.log('y is null or undefined');
if(!z) console.log('z is null or undefined');

try { if(w) 0 } catch(e) { console.log('w is undeclared') }
// typeof not throw exception for undelared variabels
if(typeof w === 'undefined') console.log('w is undefined');

Ad 2. ===は値と型をチェックします。 ==は同じ型を必要とせず、(.valueOf().toString()を使って)比較の前に暗黙の変換を行います。ここにあなたはすべて( src )を持っています:

if の場合

enter image description here

== (その否定 !=

enter image description here

=== (その否定 !==

enter image description here

0