为了账号安全,请及时绑定邮箱和手机立即绑定

Js位置方法,关于indexOf()

Js位置方法,关于indexOf()

慕侠2389804 2019-04-21 20:13:51
varperson={name:"Nike"};varpeople=[{name:"Nike"}];varmorepeople=[person];console.log(people.indexOf(person));//打印-1console.log(morepeople.indexOf(person));//打印0想问下,为什么第四行和第五行会有这个差别?
查看完整描述

2 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

对象存储的一些概念。当我们创建一个对象的时候
varobj={};
obj叫做对象的引用,存储的是对象的内存地址,这个地址指向实际的存储{}的单元。所以,当我们再创建一个对象
varobj_1={};
这个时候,obj和obj_1分别存储的是前一个{}和后一个{}的地址,这两个地址显然是不一样的。所以obj和obj_1不相等。
与对象相对应的是基本数据类型,比如int
vari1=1,i2=1;
这里i1和i2不仅看起来相同,而且确实是相等的。这是因为,创建基本类型的变量的时候,js会对值相同的分配同一块内存,它们的地址相同,所以可以相等。但是,如果通过下面的方式创建的i1和i2,就不相等了
vari1=newNumber(1),i2=newNumber(1);
indexOf这里的数组对象的indexOf会对传入的参数和数组元素逐个匹配,遇到相同的就返回。因为上面的obj和obj_1并不相等,所以
[obj].indexOf(obj_1)
的结果是-1
                            
查看完整回答
反对 回复 2019-04-21
?
慕斯709654

TA贡献1840条经验 获得超5个赞

indexOf和lastIndexOf在内部使用===运算符来判定相等性,对于对象来说,只有当两个对象引用同一内存地址时,它们才被认为是相等的。
JS引擎每遇到一个对象字面量,都会分配一个新的内存地址
vara={}
varb={}
a===b//false
                            
查看完整回答
反对 回复 2019-04-21
  • 2 回答
  • 0 关注
  • 446 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信