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
方法。
任何人都可以解释它是如何运作的吗?
答案 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);
}