mdn:当两个操作数都是对象时,JavaScript会比较其内部引用,当且仅当他们的引用指向内存中的相同对象(区域)时才相等,即他们在栈内存中的引用地址相同。
a().c() 和 a() 都指向的是b,为什么会不相等呢?难道他们的内存地址不一样?
mdn:当两个操作数都是对象时,JavaScript会比较其内部引用,当且仅当他们的引用指向内存中的相同对象(区域)时才相等,即他们在栈内存中的引用地址相同。
a().c() 和 a() 都指向的是b,为什么会不相等呢?难道他们的内存地址不一样?
javascript 中对象的比较不是值得比较,是引用的比较和对象拥有的属性以及值并没有半毛线关系, 两个对象的引用是一样的才是相等的并且 == 与 === 对于对象的比较来说并没有区别都是引用的比较;
a().c() 返回的是一个新定义的b 对象
a() 返回的也是一个新的定义的b对象
都是新的对象并没有指向同一个引用,所以false;
var idx = 0;
var a = function(){
console.log(idx++);
var b = {
c: function(){
return this;
}
}
return b;
}
改成这样你能明白了
下面的才是你期望的
var b = {
c: function(){
return this;
}
};
var a = function(){
return b;
}
这个也是你想要的答案:
var test = a();
test.c() === test; // true
问题在于你的方法 a 执行了两遍,每一遍都 var 了一个 b ,两个 b 本来就不同,处于不同的作用域,自然不可能相等。
10 回答11k 阅读
6 回答3k 阅读
5 回答4.7k 阅读✓ 已解决
4 回答3k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
每次执行
a()
函数,都会重新创建一个b
对象,因为var b = {...}
是在函数体内的,所以肯定不相等