var person = {name:"Nike"};
var people = [{name:"Nike"}];
var morepeople = [person];
console.log(people.indexOf(person)); //打印-1
console.log(morepeople.indexOf(person)); //打印0
想问下,为什么第四行和第五行会有这个差别?
var person = {name:"Nike"};
var people = [{name:"Nike"}];
var morepeople = [person];
console.log(people.indexOf(person)); //打印-1
console.log(morepeople.indexOf(person)); //打印0
想问下,为什么第四行和第五行会有这个差别?
indexOf 和 lastIndexOf 在内部使用 ===
运算符来判定相等性,对于对象来说,只有当两个对象引用同一内存地址时,它们才被认为是相等的。
JS 引擎每遇到一个对象字面量,都会分配一个新的内存地址
var a = {}
var b = {}
a === b // false
person又不在people中,怎么可能打印出位置person -> {name:"Nike"}
和 people[0] -> {name:"Nike"}
是两个不同对象
就是值类型和引用类型的区别呗
{} === {} // false
var person = {name:"Nike"};
var people = [{name:"Nike"}]; //这里创建了一个新对象
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
对象存储的一些概念。
当我们创建一个对象的时候
obj叫做对象的引用,存储的是对象的内存地址,这个地址指向实际的存储 {} 的单元。
所以,当我们再创建一个对象
这个时候,obj 和 obj_1 分别存储的是前一个{}和后一个{}的地址,这两个地址显然是不一样的。
所以 obj 和 obj_1 不相等。
与对象相对应的是基本数据类型,比如 int
这里 i1 和 i2 不仅看起来相同,而且确实是相等的。这是因为,创建基本类型的变量的时候,js会对值相同的分配同一块内存,它们的地址相同,所以可以相等。但是,如果通过下面的方式创建的 i1 和 i2,就不相等了
indexOf
这里的数组对象的indexOf会对传入的参数和数组元素逐个匹配,遇到相同的就返回。
因为上面的 obj 和 obj_1 并不相等,所以
的结果是 -1