web-dev-qa-db-ja.com

JavaScriptでnullまたはundefinedが使用されるのはいつですか?

JavaScriptがnullまたはundefinedを返すタイミングについて本当に混乱しています。また、異なるブラウザはこれらを異なる方法で返しているようです。

null/undefinedの例を、それらを返すブラウザで教えてください。

undefinedの側面については明確になりましたが、nullについては100%明確ではありません。空白の値に似ていますか?

例えば。値が設定されていないテキストボックスがあります。その値にアクセスしようとすると、nullまたはundefinedになりますが、それらは似ていますか?

115
testndtv

呼び出しがノードを返さない場合、DOMメソッドgetElementById()nextSibling()childNodes[n]parentNode()などはnull(定義されているが値を持たない)を返します。オブジェクト。

プロパティは定義されていますが、それが参照するオブジェクトは存在しません。

これは、数少ない場合の1つですnot同等性をテストしたい-

if(x!==undefined)は、null値に対してtrueになります

ただし、undefinedまたはnullのいずれでもない値の場合、if(x!= undefined)はtrue(のみ)になります。

80
kennebec

さまざまなシナリオに対して未定義になります。

Varで変数を宣言しますが、決して設定しません。

var foo; 
alert(foo); //undefined.

設定したことがないオブジェクトのプロパティにアクセスしようとしました。

var foo = {};
alert(foo.bar); //undefined

提供されなかった引数にアクセスしようとしました。

function myFunction (foo) {
  alert(foo); //undefined.
}

Cwolvesが別の答えのコメントで指摘したように、値を返さない関数。

function myFunction () {
}
alert(myFunction());//undefined

通常、nullは変数またはプロパティに意図的に設定する必要があります(設定せずに表示できる場合のコメントを参照してください)。さらに、nullはobject型で、undefinedはundefined型です。

また、JSONではnullは有効ですが、undefinedは無効であることに注意する必要があります。

JSON.parse(undefined); //syntax error
JSON.parse(null); //null
50
Bjorn Tipling

私は何かを見逃しているかもしれませんが、わかりました、あなたはundefinedだけを取得します

更新: OK

undefinedを取得します...

...存在しないオブジェクトのプロパティにアクセスしようとすると:

var a = {}
a.foo // undefined

...変数を宣言したが初期化していない場合:

var a;
// a is undefined

...値が渡されなかったパラメーターにアクセスする場合:

function foo (a, b) {
    // something
}

foo(42); // b inside foo is undefined

...関数が値を返さない場合:

function foo() {};
var a = foo(); // a is undefined

いくつかの組み込み関数は、何らかのエラーでnullを返す場合がありますが、そうであれば、文書化されます。 nullはJavaScriptの具体的な値ですが、undefinedはそうではありません。


通常、それらを区別する必要はありません。変数の可能な値に応じて、if(variable)を使用して値が設定されているかどうかをテストするだけで十分です(nullおよびundefinedfalseに評価されます)。

また、異なるブラウザはこれらを異なる方法で返しているようです。

具体例を挙げてください。

9
Felix Kling

このトピックに関して、仕様(ecma-262)は非常に明確です。

本当に便利でわかりやすいので、共有します。-ここで Equality algorithm を見つけます-ここで Strictを見つけます等式アルゴリズム

私は、Mozilla開発者サイトのセクションの同一性から「抽象的平等、厳密な平等、および同価値」と読みました。

それがあなたのお役に立てば幸いです。

3
DiegoS

プロパティが定義されていない場合、プロパティは未定義です。 nullはオブジェクトです。タイプはnullです。 undefinedはオブジェクトではなく、その型は未定義です。

これは、違いを説明し、いくつかの例を示す良い記事です。

null vs未定義

0
Alex