如何在以下代码中分配属性值:
var foo = {};
var bar = {};
var obj = {};
obj[foo] = "Nishan";
obj[bar] = "Manis";
console.log(obj[foo]);
为什么要提供输出" Manis"
var foo = {};
var bar = {};
var obj = {};
obj.foo = "Nishan";
obj.bar = "Manis";
console.log(obj.foo);
Output: "Nishan"
使用"对象的声明属性有什么区别。"和" []" 例如:obj.far =" Nish"和obj [far] =" Nish"
var foo = {};
var bar = {};
var obj = {};
obj.foo = "Nishan";
obj.bar = "Manis";
console.log(obj[foo]);
给予未定义的
答案 0 :(得分:6)
对象仅作为键有效,因为它被转换为字符串,而对象的字符串表示形式为[object Object]
,因此您所做的就等于
var obj = {};
obj[`[object Object]`] = "Nishan";
obj[`[object Object]`] = "Manis";
console.log( obj[`[object Object]`] ); // returns Manis
所以基本上你覆盖了键/值对,因为foo
和bar
的字符串表示是相同的,它们都被转换为[object Object]
编辑:
在第二个和第三个示例中,您执行类似
的操作var foo = {};
obj.foo = "something";
但是当你使用点表示法时,你可以声明你想要的任何属性,并且对象上的属性foo
与上面声明的变量foo
无关,它们不是即使是远程相关的,你也可以这样做
var foo = {};
obj.didgeridoo = "something";
相关性是相同的,没有。
答案 1 :(得分:3)
使用方括号表示法访问属性时,必须传入一个字符串。
foo
和bar
都是对象。
将对象转换为字符串时,默认情况下会得到"[Object object]"
之类的结果。
foo.toString() === bar.toString()
所以obj[foo] === obj[bar]
。