2

なぜ最初は機能し、後者は機能しないのですか?? * 後者のケースでは、cats オブジェクト プロパティにアクセスするために省略形を使用したという小さな違いにすぎません。「プロパティの名前が有効な変数名である場合、スペースや記号が含まれておらず、数字で始まっていない場合」に違いはないことを読みました。

    //this works 
    var cats = {Spot:true};

    function addCat (name) {   cats[name] = true; }

    addCat("white");

    console.log ("white" in cats);  //true

    console.log (cats.white); //true

    //this doesn't work 
    var cats = {Spot:true};

    function addCat (name) {   cats.name = true; }

    addCat("white");

    console.log ("white" in cats); //false

    console.log (cats.white); //undefined
4

1 に答える 1

5

2番目のコードでcats.nameは動的ではないためname、関数で値を取得できません。ただし、次のプロパティを設定していますname

//this works
var cats = {
    Spot: true
};

function addCat (name) {   
    cats.name = true; 
    // use cats[name] like in your first example
}
addCat("white");

console.log(cats); 
/*
{
    Spot: true,
    name: true
}
*/

console.log ("name" in cats); //true
console.log (cats.name); // true
于 2013-07-18T19:02:25.037 に答える