了解Javascript对象代码片段

时间:2015-11-03 15:25:12

标签: javascript

我在Mozilla开发者网络(MDN)上遇到了this code snippet,我正试图弄清楚为什么结果确实是'价值'

 ng-class="activo(h_m);{ \'hora-select\': h_m.selected,\'hora-select:hover\': h_m.selected}

如果有人愿意开导我,我将不胜感激!

5 个答案:

答案 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个迷你实验看到这里发生了什么:

  1. 在您创建的每个对象上调用toString()的结果是什么?

    foo.toString()bar.toString()object.toString()将输出:

    [object Object]
    
  2. object[{}]的结果是什么?

    它也是"value",因为运行时用于存储您的值的关键字是[object Object]

  3. 让我们改变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