属性名称上的Javascript toString方法

时间:2017-08-29 09:55:37

标签: javascript object

var foo = {unique_prop: 1}, bar = {unique_prop: 2}, object = {};
object[foo] = 'anu';
console.log(object[bar]);

上面的代码输出“anu”。

toString方法将非字符串对象强制转换为字符串对象。

在上面的代码object[bar]中输出值为'anu'。

Document说'因为foo和bar都转换为相同的字符串'

我无法理解此代码中的java脚本toString方法。

任何人都可以解释它是如何运作的吗?

1 个答案:

答案 0 :(得分:7)

当您使用foo的值作为属性名称时,它会在toString上调用foo,如object[foo.toString()] = 'anu',如果不重写,则会返回相同的值对于每个对象,'[object Object]'

所以实际上你有一个名为'[object Object]'的属性。 console.log以下将确保您拥有名为'[object Object]'的商标。

var foo = {unique_prop: 1};

var object = {};

object[foo] = 'anu';

console.log(`foo.toString() - ${foo.toString()}`);
console.log(`object.toString() - ${object.toString()}`);
console.log(`object.toString() === foo.toString() ? - ${object.toString() === foo.toString()}`);

for(var prop in object) {
  console.log(prop);
}