JavaScript的Object

题目

var foo = new Object();
var bar = new Object();
var map = new Object();
    
map[foo] = "foo";
map[bar] = "bar";
    
alert(map[foo]);  // what will this display??

解析

javaScript里的Object都是以 key-value的集合形式存在的
其中key都是以string的形式存在的,如果key不是string,则javaScript会自动将key的类型转为string
题中 -> foo 和 bar 都是Object类型,因为会被自动转为string,因为foo 和 bar 都没有override各自的toString()方法,因为被强制转为string后都是[object object]

答案

var foo = new Object();
var bar = new Object();
var map = new Object();

map[foo] = "foo";    // --> map["[Object object]"] = "foo";
map[bar] = "bar";    // --> map["[Object object]"] = "bar";
                     // NOTE: second mapping REPLACES first mapping!

alert(map[foo]);     // --> alert(map["[Object object]"]);
                     // and since map["[Object object]"] = "bar",
                     // this will alert "bar", not "foo"!!
                     //    SURPRISE! ;-)