javascript中的对象属性值

时间:2014-06-06 12:45:41

标签: javascript

如何在以下代码中分配属性值:

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]);

给予未定义的

2 个答案:

答案 0 :(得分:6)

对象仅作为键有效,因为它被转换为字符串,而对象的字符串表示形式为[object Object],因此您所做的就等于

var obj = {};

obj[`[object Object]`] = "Nishan";
obj[`[object Object]`] = "Manis";

console.log( obj[`[object Object]`] ); // returns Manis

所以基本上你覆盖了键/值对,因为foobar的字符串表示是相同的,它们都被转换为[object Object]

编辑:

在第二个和第三个示例中,您执行类似

的操作
var foo = {};

obj.foo = "something";

但是当你使用点表示法时,你可以声明你想要的任何属性,并且对象上的属性foo与上面声明的变量foo无关,它们不是即使是远程相关的,你也可以这样做

var foo = {};

obj.didgeridoo = "something";

相关性是相同的,没有。

答案 1 :(得分:3)

使用方括号表示法访问属性时,必须传入一个字符串。

foobar都是对象。

将对象转换为字符串时,默认情况下会得到"[Object object]"之类的结果。

foo.toString() === bar.toString()所以obj[foo] === obj[bar]