问题:foo.x的价值是什么?
var foo = {n: 1};
var bar = foo;
foo.x = foo = {n: 2};
foo.x
# undefined
以下是我的想法: 双重作业,从右到左
var foo = {n: 1};
var bar = foo;
foo = {n: 2};
foo.x = foo
foo.x
# Object {n: 2, x: Object}
我应该检讨哪个概念?谢谢!
答案 0 :(得分:0)
foo.x = foo = {n: 2};
foo.x
所以,您在这里设置foo.x
至foo
,同时将foo
设为{n:2}
在此之后,foo
将等于{n:2}
所以foo.x
不再存在。
第二个有效的原因是因为你说foo.x
等于foo
等于{n:2, x: object}
答案 1 :(得分:0)
foo.x=foo={n:2}
所做的事实上是bar.x=foo={n:2}
。
foo={n:2}
将foo更改为指向新的不同对象,以便foo.x=
变为bar.x=
。
答案 2 :(得分:0)
一个有用的概念是operator precedence。
如您所见,分配操作(即=
)的优先级低于成员访问权(即foo.x
)。因此,在foo.x
之前评估foo = {n: 2}
,之后评估自己的分配。因此,分配的foo.x
引用旧foo
,而不是刚刚分配的var rain = [1072,1050,1053,1168,1080,1183,1171,1063,1083,1086,1089,1240,1273];
var number = 1072;
for (var j = 0; j < rain.length; j++) {
if (number == rain[j]) {
$('body').css('background', 'blue');
} else {
$('body').css('background', 'yellow');
}
}
。