プロパティを設定せずに宣言しても、本質的には何も起こりません。エラーにはなりませんが、一部のインタープリターは警告をスローします — 厳格モードも同様だと思います。
JavaScript では、これがすぐにわかるわけではありません。たとえば、次のようにします。
function Hello() {
this.value1;
}
var h = new Hello;
alert(h.value1);
アラートには が表示されますundefined
。ただし、プロパティvalue1
に実際にアクセスしたことはありません。値を指定しなかったため、まったく存在しません。
JavaScript はundefined
、存在しないプロパティにアクセスしようとすると、エラーをスローするのではなく、戻ります。したがって、次のように記述しても同じ結果が得られます。
alert(h.property_that_doesnt_exist); //alerts 'undefined'
のプロパティを繰り返し処理すると、プロパティが存在しないことがh
明確に示されます。value1
for (var key in h) {
alert(key + ' = ' + h[key]);
}
プロパティが見つからないため、これは何も警告しません。ただし、プロパティを JS プリミティブに設定すると、プロパティはundefined
存在します。
function Hello() {
this.value1 = undefined;
}
var h = new Hello;
for (var key in h) {
alert(key + ' = ' + h[key]); //alerts 'undefined'
}
ここで上記のコードを実行できます: http://jsfiddle.net/Acdmn/
しかし、プロパティ/変数を に設定する正当な理由はありませんundefined
。「空の」値を持つプロパティを作成するために、JavaScript プログラマーは通常、以下を使用しますnull
。
function Hello() {
this.value1 = null;
}
これにより、プロパティが意図的に作成されたことが明らかになりますが、まだ意味のある値を与える準備ができていません。
最後に、プロパティ定義は、明示的に設定された「通常の」(プライベート) 変数とは異なる動作をすることに注意してくださいvar
(これらはプロパティでもありますが、この場合はwindow
オブジェクトです)。あなたが書く場合:
var foo;
alert(foo);
alert(some_undefined_variable_name);
最初のアラートはundefined
. 変数foo
が作成され、存在し、プリミティブ値が含まれてundefined
います (明示的に設定していなくても)。ただし、2 番目のアラートは参照エラーをスローします。
ReferenceError: some_undefined_variable_name is not defined
したがって、JavaScript は未定義の変数の使用を容赦しませんが、未定義のプロパティを使用しようとしても気にしません。