3

以下のJavaScript関数があります-

function ResponseVal()
{
    this.value1;
    this.value2;
} 


var Response = new ResponseVal();

上記のコードを chrome consolebar で実行しようとしましたが、新しく作成されたオブジェクト "Response" にプロパティ value1 と value2 が表示されない理由がわかりませんでした。何が起こっているのか、なぜプロパティが表示されないのかを理解するのを手伝ってくれる人はいますか?

4

4 に答える 4

0

少なくとも、value1 と value2、'null' に値を割り当てる必要があります。

于 2013-08-15T14:32:42.017 に答える
0

プロパティを設定せずに宣言しても、本質的には何も起こりません。エラーにはなりませんが、一部のインタープリターは警告をスローします — 厳格モードも同様だと思います。

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 は未定義の変数の使用を容赦しませんが、未定義のプロパティを使用しようとしても気にしません。

于 2013-08-15T15:12:34.870 に答える