我在Mozilla开发者网络(MDN)上遇到了this code snippet,我正试图弄清楚为什么结果确实是'价值'
ng-class="activo(h_m);{ \'hora-select\': h_m.selected,\'hora-select:hover\': h_m.selected}
如果有人愿意开导我,我将不胜感激!
答案 0 :(得分:3)
object[foo] = 'value';
您只能将字符串作为标识符,因此当上述内容运行时,JavaScript会在内部调用ToString
方法,该方法代表"[object Object]"
。这就是对象的表示方式。
现在当您object[bar]
时,bar.toString()
也是"[object Object]"
,并且由于'value'
与"[object Object]"
一起存储为关键,因此会返回。
答案 1 :(得分:1)
如果您在控制台中快速查看,您会看到这是因为foo
被强制转换为string
(因为Javascript中的所有键都是字符串**),默认为{ {1}}。每个对象的字符串[object object]
相同,因此[object object]
似乎是foo
,但实际上并非如此。看看下面的输出:
bar

var foo = {unique_prop: 1}, bar = {unique_prop: 2}, object = {};
object[foo] = 'value';
var output = document.getElementById('p')
for(thing in object){
output.textContent += thing + " = " + object[thing];
}

**我认为ES6有一种使用<p id='p'></p>
语法设置计算密钥的方法,但我还没有深入研究过,所以请原谅我可能的错误。
答案 2 :(得分:1)
你可以通过3个迷你实验看到这里发生了什么:
在您创建的每个对象上调用toString()的结果是什么?
foo.toString()
,bar.toString()
和object.toString()
将输出:
[object Object]
object[{}]
的结果是什么?
它也是"value"
,因为运行时用于存储您的值的关键字是[object Object]
让我们改变toString的行为,看看会发生什么。
Object.prototype.toString = function(){
return this.unique_prop;
};
// Re run the code
object[foo] = "value";
console.log(object[bar]); // Returns undefined
// Value was stored under the key "1"
console.log(object[1]); // Returns "value"
答案 3 :(得分:0)
因为此对象中的键是foo和bar对象的字符串表示形式,如
Object {[object Object]: "value"}
。
答案 4 :(得分:0)
如上所述,使用对象string设置对象属性结果是键
> console.log(foo.toString())
[Log] [object Object]
所以对象[foo]等同于
object["[object Object]"] = 'value';
但是如果你真的希望它们与众不同,你可以这样做:
> console.log(JSON.stringify(foo))
[Log] {"unique_prop":1}
> object[JSON.stringify(foo)] = 'donkey'
> console.log(object)
[Log] {[object Object]: "value", {"unique_prop":1}: "donkey"}
> console.log(object[JSON.stringify(bar)])
[Log] undefined