从函数访问javascript对象

从函数访问javascript对象,javascript,object,javascript-objects,Javascript,Object,Javascript Objects,为什么第一个有效,而第二个无效*这只是一个微小的区别,在后一种情况下,我使用速记来访问cats对象属性。我读到,如果“属性的名称是一个有效的变量名——当它没有任何空格或符号,并且不是以数字字符开头时”,则不会有任何区别 在第二个代码中,cats.name不是动态的,因此无法在函数中获取name的值;但是,您正在设置一个名为name的属性: //this works var cats = { Spot: true }; function addCat (name) { c

为什么第一个有效,而第二个无效*这只是一个微小的区别,在后一种情况下,我使用速记来访问cats对象属性。我读到,如果“属性的名称是一个有效的变量名——当它没有任何空格或符号,并且不是以数字字符开头时”,则不会有任何区别



在第二个代码中,
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

cats.name
不是动态的。请尝试
console.log(cats)
,您将看到您的问题
cats.name
cats
上设置一个名为
'name'
的属性。同时,该属性也是重复的
    //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
//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