JavaScript高级程序设计之图解indexof引发的惨案

109 阅读1分钟

在阅读JavaScript高级程序设计时,有这样一个例子:

var person = { name:  "Nicholas"};
var people = [{ name: "Nicholas"};
var morePeople = [person];
alert(people.indexOf(person));     // -1         
alert(morePeople.indexOf(person)); // 0

吾思不得其解为什么people.indexOf(person))是-1,故画图来看看 wdlytO.png

var person = { name:  "Nicholas"};
分析这段语句,首先在堆中创建了地址XXXXXA(假设),里面存放了name:  "Nicholas",
并且在栈中创建了变量person,其本质是个指针,保存了指向堆中的地址XXXXXA,其它几段语句同理,见上图

为了证明morePeople[0]存放的是xxxxxA即person
alert(morePeople[0] == person);   // true 根据图很好理解为什么是true