0

私はここでそれを失っています..私は今、このループがどのように機能するかについて非常に混乱しています.

w3 学校から:

var person={fname:"John",lname:"Doe",age:25}; 

for (x in person)
{
document.write(person[x] + " ");
}

person はプロパティを持つオブジェクトですよね? それらのプロパティは括弧でどのようにアクセスされていますか? それは配列用だと思いましたか?

これも機能するのはなぜですか?

var person=[]; 
person["fname"] = "John";
person["lname"] = "Doe";
person["age"] = "25";


for (x in person)
{
document.write(person[x] + " ");
}
4

5 に答える 5

3

オブジェクトのプロパティにアクセスするには、次の 2 つの方法があります。

  • obj.key
  • obj['key']

2 番目の方法の利点は、たとえば例のように、キーを動的に提供できることですobj[x]obj.x文字通り、xプロパティ (つまりobj['x']) を意味しますが、これはあなたが望むものではありません。

配列はブラケットでのみ機能しますが、ブラケットは配列に限定されません。配列もオブジェクトの下にありますが、数値キー用に設計されています。数値以外のキーを持つプロパティを追加することはできますが、それは設計された目的ではありません

于 2011-07-21T09:35:41.793 に答える
1

JavaScriptのブラケット演算子を使用して、オブジェクトリテラルと配列の両方にアクセスできます。オブジェクトの場合、ブラケット演算子は、ブラケット内の値を文字列に変換し(文字列でない場合)、それが実際にプロパティ(mdc)であるかどうかを確認することにより、オブジェクトのメンバーにアクセスします。

2番目の例では、JavaScriptでは推奨されていない「連想配列」を使用することを提案しています(リンク)。

Mapあなたの質問に答えるには: for-inループを使用して反復する同様の構造(つまり、キーと値のペアを保持するオブジェクト)を記述する標準的な方法(imo)はObjectリテラルです。より伝統的な配列を書く標準的な方法はArray Objectです。

var map = { "a": "string" , "b": 0 , "c": null } ;

    for(key in map) console.log("(!!) map # " + key + " : " + map[key] ) ;

var list = ["string",0,null] ;

    for(i = 0 ; i < list.length ; i++) console.log("(!!) list # " + i " : " + list[i] ) ;
于 2011-07-21T09:40:18.710 に答える
0

JavaScript オブジェクトのプロパティには、object[key] と object.key の両方を使用してアクセスできます (おそらく他の方法もいくつかあります)。彼らが働く方法だけです。

2 番目の例では、配列は特別なオブジェクトですが、それでもオブジェクトです。

于 2011-07-21T09:30:55.517 に答える
0

in js オブジェクトは連想配列です。つまり、キーと値のペアのコレクションにすぎません。
ブラケットについて混乱している場合は、そうしないでください。Javascript オブジェクトのプロパティには、「.」を介してアクセスできます。または「[]」構造:

var a = {key : 'val'};
alert(a['key'] === a.key);

ほとんどの場合、それらは同じように機能します。
設定とブラウザの実装の問題です (例: Firefox は角かっこで高速に動作し、chrome はドットで高速に動作します)。
ドット構成が失敗する状況があります。「some-key」という名前のプロパティを持つオブジェクトがあるとします。
ドット表記 : でアクセスしたい場合object.some-key、コードが 2 つの値 : の違いとして解釈されるため、エラーが発生することはほぼ確実ですobject.some - key。この場合、括弧 : を使用する必要がありますobject['some-key']。キーに、、、、、などの
特殊文字が含まれている場合もありますが、これらはJavaScriptで既に解釈されています。.,;\*

于 2011-07-21T09:32:11.343 に答える
0

http://bonsaiden.github.com/JavaScript-Garden/#object.general

「オブジェクトのプロパティには、ドット表記または角括弧表記の 2 つの方法でアクセスできます。」

于 2011-07-21T09:32:44.060 に答える