属性名称上的Javascript toString方法

Ash*_*sha 0 javascript object

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

上面的代码输出"anu".

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

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

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

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

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

Sur*_*yan 7

当您使用foo的值作为属性名称,它要求toStringfooobject[foo.toString()] = 'anu',如果不重写,将返回相同的数值为每个对象,这是'[object Object]'

所以实际上你有一个名字的属性'[object Object]'.下面console.logs将确保您拥有一个名字的财产'[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);
}
Run Code Online (Sandbox Code Playgroud)