混淆Javascript属性访问器

混淆Javascript属性访问器,javascript,Javascript,我不完全明白这一点: var one = {}; var two = {}; var three = {}; three[one] = "one"; three[two] = "two"; console.log(three[one]); // Alerts "two" 据我所知,JS需要在括号属性表示法中包含一个字符串。看来JS正在尝试改变: three[one] = "one"; three[two] = "two"; 进入: 两个toString()方法都没有定义,所以它们最终是相

我不完全明白这一点:

var one = {};
var two = {};
var three = {};

three[one] = "one";
three[two] = "two";

console.log(three[one]); // Alerts "two"
据我所知,JS需要在括号属性表示法中包含一个字符串。看来JS正在尝试改变:

three[one] = "one";
three[two] = "two";
进入:

两个toString()方法都没有定义,所以它们最终是相同的值? 不知道我是否得到了它

var one = {};
var two = {};
var three = {};

three[one] = "one";
three[two] = "two";
最后两行是:

three[object] = "one";
three[object] = "two";
因为一和二都声明为对象

您正在制作的三个对象如下所示:

[object Object] {
  [object Object]: "two"
}

实际上,定义了toString方法,并为这两个方法生成相同的字符串(
[object object]

varone={};
var-two={};
$('body').append(一个.toString()+'
'+两个.toString())
方法
.toString()
来自对象原型。尝试在浏览器控制台中键入
({}).toString()
。实际上,您只是在使用键
[object]
。。您正在设置值:
three[“[对象]”]=“一”,然后将其覆盖为“2”,然后访问被覆盖的值。“[object object]”加上引号,即是。@Josh Crozier感谢您的澄清。看来我的直觉是对的。
[object Object] {
  [object Object]: "two"
}