题目

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! ;-)

相关文章:

  • 2021-08-05
  • 2021-12-21
  • 2021-11-20
  • 2021-08-29
  • 2021-07-05
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-06-24
  • 2022-12-23
  • 2022-12-23
  • 2021-09-08
  • 2022-12-23
  • 2022-01-05
相关资源
相似解决方案