プロパティを設定せずに宣言しても、本質的には何も起こりません。エラーにはなりませんが、一部のインタープリターは警告をスローします — 厳格モードも同様だと思います。
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 は未定義の変数の使用を容赦しませんが、未定義のプロパティを使用しようとしても気にしません。