关于indexOf()

 var person ={name:"n"}   
 var people=[{name:"n"}];
 var morePeople=[person];    
 alert(people.indexOf(person)) ;  //-1
 alert(morePeople.indexOf(person));  //0
 //不明白people和morePeople两者之间的差别。
阅读 3k
4 个回答
var person ={name:"n"}   
var people=[{name:"n"}];
var morePeople=[person];

alert(people.indexOf(person)) ;  //-1
//people里没有person对象,当然返回-1

alert(morePeople.indexOf(person));  //0
//morePeople里第0个元素就是person,所以返回所在位置0

归根结底,你问题是为什么{name: "n"} === {name: "n"}结果是false。那你要去看看Comparison operators

图片描述

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

按我的理解,变量保存的是对象的引用,所以,people.indexOf(person),求的应该是它保存的引用在people中的位置,但是虽然 person 指向的对象的值虽然是{name:"n"},但是,跟people中的{name:"n"},并不是同一个对象,所以,就返回了 -1.

比people非彼people。不是一个对象

indexOf方法在ES5中仅有字符串和数组有这种方法。
而对象没有这方法。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题