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