2
function doIt()
{
    var person={firstname:"John", lastname:"Smith", age:"25"};
    var x;
    var txt="";
    for (x in person)
    {
        txt=txt+person[x] +"<br>";
    }
    document.getElementById("showtext").innerHTML=txt;
}

私の質問は次のとおりです。

txt=txt+person[x]+"<br>";

と:

txt=txt+person.x+"<br>";

person.x の値は undefined として返されますか? ループの最初の反復では、x は「firstname」である必要があります。したがって、person.x は person.firstname と等しくなければならず、値 John を返します。代わりに「未定義」を返す理由を理解したいと思います。

4

6 に答える 6

3

答えは次のとおりです。

xはプロパティ名ではなく、オブジェクトには名前/キーxを持つプロパティがないためです。

人.x

未定義です。

これは、

person[ "x" ] (微妙な違いは二重引用符にあります)

これも未定義です。

ドット表記で動作させるには、次のように記述する必要があります。

 eval("person." + x); // but this is evil 
 // Tested on win7 with chrome 45+

そのため、式eval("person." + x)は最初の実行でeval("person.firstname" )に展開され、 "John"が返されます
...

evalはセキュリティ上の問題を引き起こす可能性があるため、お勧めしません。

更新 1

免責事項: この回答では、最初の質問にのみ回答し、問題を説明しようとしました。「//しかしこれは悪です」で、このアプローチを使用しないことを提案しています。

于 2013-02-26T15:12:15.290 に答える
3

x最初のケースでは、変数の値を使用してプロパティ名を決定する「ブラケット表記」を使用しています。

2 番目のケースでは、'ドット表記' を使用しています。ここで、検索されたプロパティは文字通り と呼ばれxます。

于 2013-02-26T15:13:44.203 に答える
2

と書くperson[x]と、「 の値を調べて、xその要素を見つける」という意味personです。書くと「人の内面のperson.x価値を探る」という意味になります。x

person要素がないxため、未定義になります。あなたは本当に欲しいだけですperson[x]

于 2013-02-26T15:13:16.263 に答える
0

角かっこ構文を使用する場合、Javascriptを使用すると、変数を使用してオブジェクトのプロパティにアクセスできます。したがって、person [x]は、xにプロパティ名を表す文字列が含まれている限り、実行しようとしていることを実行します。構文構文person.xは、person["x"]と同等です。

于 2013-02-26T15:16:17.633 に答える
0

x は文字列になります。たとえば、「人」なので、[] ブラケットを使用する必要があります

于 2013-02-26T15:13:30.423 に答える
0

変数キーでドット表記を使用することはできません。未定義のプロパティ「x」を検索します。person[x] が正しい方法です。

于 2013-02-26T15:13:35.577 に答える