2015-12-02 57 views
2

我不完全得到这个:混淆的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"; 

到:

three[one.toString()] = "one"; 
three[two.toString()] = "two"; 

两者的toString()方法没有定义,使他们最终会被相同的值? 不知道我是否得到它。

+1

的'的ToString()'方法来自于对象的原型。尝试在浏览器控制台中键入'({})。toString()'。 – Pointy

+0

你基本上只是使用键'[object Object]'...你正在设置值:'three [“[object Object]”] =“one”;',然后覆盖到'two',然后访问那被覆盖的价值。 –

+0

“[object Object]”的引号是。 – trincot

回答

4

其实toString方法的定义和结果在两个相同的字符串([object Object])。

var one = {}; 
 
var two = {}; 
 
$('body').append(one.toString()+'<br>'+two.toString());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

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

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

最后两行说:

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

因为一,两个都声明为对象。

你正在做的三个对象将是这样的:

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