关于javascript中indexOf方法的一个疑问 javascript 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 a = ["a",{c:1},["c"]];a.indexOf("a");a.indexOf({c:1});a.indexOf(["c"]); morePeople是数组啊,包含person所以可以找到 你觉得people[0]和person是一样么?person是个引用类型,如果是值类型people.indexOf(person)则为0。 楼主,我也刚刚看完JS高级程序设计,在看JS精粹首先,你要确认基本类型和引用类型 的区别。 不知道你看到了没。 基本类型的变两个保存的是值,引用类型变量保存的是引用。 回到问题。 { name: "Nicholas" }; //是一个对象, person保存的是指向该对象的引用。 [{ name: "Nicholas" }]; //是一个数组(引用类型) people保存的也是指向该数组的引用morePeople = [person]; // 是一个数组,morePeople保存的是指向该数组的引用。 people和morePeople指向的完全不是同一个东西。 people.indexOf(person) // 我明白你的迷茫在哪里 明明都一样嘛 为啥为-1嘞, 这就要看indexOf的实现方法了, people[0]和person 是 ==的关系, 而不是===的关系。 indexOf 内部采用的是 ===。 我也是全凭记忆啊,书上也有这么说好像。 回头我再查查。 刚刚看了4楼的回答,突然间明白了。你这样说也不对,morePeople是数组,可是people也是数组啊?原因在于people数组里面保存的是person引用的值(是值,也就是对象本身,但是javascript里面不叫对象,就叫引用的值);而morePeople里面保存的是引用,不是引用的值。因此,在两个数组里搜索person的引用,当然就只能在moremorePeople里面找到了。不知道我这个理解对不对? 对刚刚讲的再纠正一下,morePeople和people都是引用,我应该说他们的引用所指向的堆内存地址 indexOf返回-1表示未找到 返回0者是第一位 数组的.indexOf方法,对于引用型的对象,是按对象的引用比较的morePeople[0]与person是同一个对象的引用people[0]与person是两个不同的对象,虽然对象的内容一样, 谢谢!你的回答对我启发很大!但是方向好像也有点偏差了。我的这句话是不对的。 people[0]和person 是 ==的关系, == 如果两边操作数都是对象的话,比较他们是不是同一个对象。 但是indexOf()中实现的确实是全等操作符 === 。 所以数组people中的第一个元素和person指向的不是同一个对象, ==也不成立,=== 更不成立了。 所以 -1了。 你要明白 这样查找的时候 比对的是对象的引用 你上面people在查找person的时候 两个对象的引用时不一样的 所以查不到 people里面的那个对象不是person,而是另外新建的一个对象,他不等于person,所以indexOf返回 -1,你要理解了对象的引用就好理解 求JavaScript权威指南第五版(中文版),谢谢 |zyciis| Jquery.Ajax如何修改他的url 谢谢,急 这个效果的js怎么做? 如何知道当前页是否有滚动条. 怎么弹出一个完全自定义的窗口? 这段代码是什么意思,怎么改呀。 执行sql的bean怎么返回collection? 使用document.WB.ExecWB(6,1);的问题,高手请进。 javascript实现打印功能 怎样在WEB页中动态创建、释放ActiveX控件和释放DLLs??急急!! ExtJS中如何设置textfield控件禁止粘贴和ctrl+v? 第一次发求助帖 求菊苣帮忙 百度地图点聚合的问题
a.indexOf("a");
a.indexOf({c:1});
a.indexOf(["c"]);
person是个引用类型,如果是值类型people.indexOf(person)则为0。
首先,你要确认基本类型和引用类型 的区别。 不知道你看到了没。
基本类型的变两个保存的是值,引用类型变量保存的是引用。
回到问题。
{ name: "Nicholas" }; //是一个对象, person保存的是指向该对象的引用。
[{ name: "Nicholas" }]; //是一个数组(引用类型) people保存的也是指向该数组的引用
morePeople = [person]; // 是一个数组,morePeople保存的是指向该数组的引用。
people和morePeople指向的完全不是同一个东西。
people.indexOf(person) // 我明白你的迷茫在哪里
明明都一样嘛 为啥为-1嘞, 这就要看indexOf的实现方法了,
people[0]和person 是 ==的关系, 而不是===的关系。 indexOf 内部采用的是 ===。
我也是全凭记忆啊,书上也有这么说好像。
回头我再查查。
刚刚看了4楼的回答,突然间明白了。你这样说也不对,morePeople是数组,可是people也是数组啊?
原因在于people数组里面保存的是person引用的值(是值,也就是对象本身,但是javascript里面不叫对象,就叫引用的值);而morePeople里面保存的是引用,不是引用的值。因此,在两个数组里搜索person的引用,当然就只能在moremorePeople里面找到了。不知道我这个理解对不对?
我的这句话是不对的。 people[0]和person 是 ==的关系, == 如果两边操作数都是对象的话,比较他们是不是同一个对象。 但是indexOf()中实现的确实是全等操作符 === 。 所以数组people中的第一个元素和person指向的不是同一个对象, ==也不成立,=== 更不成立了。 所以 -1了。
你要理解了对象的引用就好理解