javascript双重任务

时间:2017-01-20 23:07:54

标签: javascript

问题: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}

我应该检讨哪个概念?谢谢!

3 个答案:

答案 0 :(得分:0)

foo.x = foo = {n: 2}; foo.x

所以,您在这里设置foo.xfoo,同时将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'); } }