43

変数が宣言され、未定義および null に設定されているさまざまなコード例を見てきました。そのような:

var a; // undefined - unintentional value, object of type 'undefined'
var b = null; // null - deliberate non-value, object of type 'object'

これらの宣言に従うコードが a または b に値を代入する場合、あるタイプの宣言を別のタイプよりも優先して使用する理由は何ですか?

4

5 に答える 5

33

最初の例は変数に何も割り当てないため、暗黙的にundefined値を参照します(詳細については仕様の10.5を参照してください)。後で使用するために変数を宣言するときに一般的に使用されます。必要になる前に明示的に何かを割り当てる必要はありません。

2番目の例は明示的に割り当てられnullています(これは実際には型nullですが、JavaScript仕様の癖のため、型「オブジェクト」を持っていると主張しています)。これは通常、既存の変数にすでに格納されている値をクリアするために使用されます。nullを上書きする可能性があるため、値をクリアするときに使用する方が堅牢undefinedであると見なすことができます。そのような状況では、アシストundefinedすると予期しない動作が発生します。

余談ですが、その癖はnull、より堅牢な形式の型チェックを使用する十分な理由です。

Object.prototype.toString.call(null); // Returns "[object Null]"
于 2012-10-30T16:00:18.000 に答える
13

このリンクを見たところ、私の質問が明確になりました。 JavaScript で未定義の代わりに null を使用する理由は何ですか?

Javascript for Web Developers は次のように述べています。後でオブジェクト参照が入力されました。」

于 2012-10-30T16:03:46.683 に答える
11

物事を行うための特に良い方法はないと思いますが、私は可能な限り未定義を避けたいと思っています。多分それは強いOOPバックグラウンドによるものです。

JavascriptでOOPを模倣しようとすると、通常、変数を明示的に宣言してnullに初期化します(インスタンス変数を明示的に初期化せずに宣言する場合のOOP言語も同様です)。それらを初期化するつもりがないのなら、なぜそもそもそれらを宣言するのですか?デバッグするときに、監視する変数の値を設定していない場合は、宣言したかどうかに関係なく、未定義として表示されます...

undefined私は特定の行動を維持することを好みます:

  • メソッドを呼び出すとき、指定しない引数には未定義の値が含まれます。オプションの引数を持つ良い方法。引数が定義されていない場合は特定の動作を実装します。
  • lazy init ...私の本では、undefinedは「初期化されていません:値をフェッチします」を意味し、nullは「初期化されましたが値がnullでした(たとえば、サーバーエラーがあったか?)」を意味します。
  • 配列:myArray [myKey] ===このキーにnull値がある場合はnull、このキーに値が設定されていない場合はundefined。

ただし、 myVarが未定義、null、またはその他の値であるかどうかに関係なく、同じ値myVar == nullを返すことに注意してください。変数が未定義かどうかを知りたい場合にmyVar == undefined使用します。===

于 2012-10-30T16:11:42.180 に答える
0

null はオブジェクトです..何かが未定義の場合、それは何もありません..まだ定義されていないため、オブジェクトでも文字列でもありません..明らかに..それは単に機能のないプロパティです..

例:

var で変数を宣言しますが、設定することはありません。

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

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

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

提供されていない引数にアクセスしようとしています。

function myFunction (foo) {
  alert(foo); //undefined.
}
于 2012-10-30T16:06:29.323 に答える