2

私は codeacademy の JavaScript 演習の 1 つを行っていて、これに遭遇しました。次のコードは、codeacademy によって提供されます。

var friends = {
    bill: {
        firstName: "Bill",
        lastName: "Gates",
        number: "1",
        address: ['abc', 'def', 'ghi']
    },
    steve: {
        firstName: "Steve",
        lastNAme: "Jobs",
        number: "2",
        address: ['abc', 'def', 'ghi']
    }
};

var list = function(obj) {
    for (var prop in obj) {
        console.log(prop);
    }
};

var search = function(name) {
    for (var prop in friends) {
        if (friends[prop].firstName === name) {
            console.log(friends[prop]);
            return friends[prop];
        }
    }
};

私が理解していないのは、検索機能で、単に「prop」ではなく「friends[prop]」と書き出す必要がある理由です。for/in ループが friends(array?) のすべてのプロパティを反復処理している場合、各 props が属する配列を再度指定する必要があるのはなぜですか? 次のコードを使用できないのはなぜですか?

var search = function(name) {
    for (var prop in friends) {
        if (prop.firstName === name) {
            console.log(prop);
            return prop;
        }
    }
};
4

3 に答える 3

6

prop実際には、プロパティ自体ではなく、オブジェクトのプロパティ (=key) の名前です。これはプレーンな文字列 ( "bill") であり、実際のオブジェクトfriends.bill(/オブジェクトへの参照) ではありません。

これがあなたが書く理由でもあります

friends[prop] // prop gets evaluated here, it's value is the identifier

それ以外の

friends.prop  // prop is treated as the identifier here

例:

var friends = {
    bill: { ...
    }
}
for (var prop in friends) {
    // prop == "bill";
    friends[prop] == friends.bill 
}

実際、これは (新しい) オブジェクトのすべてのプロパティ名の配列を返し、反復処理を行うのに似てObject.keys(friends)います (おそらく、他の言語から来た人にとってはもう少し直感的です)。

編集: 重要な注意事項が 1 つあります。

とは異なりObject.keys()、プロトタイプから継承されたものも含め、オブジェクトのすべてのfor inプロパティを一覧表示します。したがって、「ネイティブ」プロパティのみを確実に取得したい場合は、それがオブジェクトの本物のプロパティであるかどうかを常に確認する必要があります

for (var prop in friends) {
    if (friends.hasOwnProperty(prop) ){
         // it's a true property of your object
    }
}
于 2013-06-05T09:02:15.470 に答える
2

for..in値ではなく、オブジェクトのキーに対して反復します。

PHP に精通している場合:

foreach ($friends as $prop => $value) ...

for..in$propではなく、あなただけを与えます$value。を取得するには、または Javascript 用語で$valueを使用する必要があります。$friends[$prop]friends[prop]

于 2013-06-05T09:03:15.877 に答える
1

変数propは、キー -> 値のペアリングのキーと考えてください。

ステートメントfriends[prop]は、オブジェクトの という名前のキーpropの値を指定していますfriends

代わりに と言うとprop.firstname、実際には にfirstname割り当てられた文字列のプロパティを指定していることになりますが、はオブジェクトではないpropため意味がありません。prop

于 2013-06-05T09:11:48.567 に答える