<script>
var a = {n:1};
a.x = a = {n:2};
console.log(a.x); //undefined
var b = {n:1};
b = b.x = {n:2};
console.log(b); //object{n:2}
console.log(b.x); //undefined
</script>
三个输出是什么原理?谢谢
<script>
var a = {n:1};
a.x = a = {n:2};
console.log(a.x); //undefined
var b = {n:1};
b = b.x = {n:2};
console.log(b); //object{n:2}
console.log(b.x); //undefined
</script>
三个输出是什么原理?谢谢
b = b.x = {n:2};就不解释了。
a.x = a = {n:2};会特殊一点。
“.“运算符的优先级要高于”=“的优先级,所以这里的次序是:
但由于a的指向已经改变,不再指向原有的对象,所以a.x就为undefined。
全过程你可以通过以下程序观察清楚。
var a = {n:1}
var b = a
a.x = a = {n:2}
console.log(b)
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
等式从右边开始计算,但是在计算之前先求得各个变量的地址。即
a.x
中的a指向{n:1}
这个对象,而连等式中的a
指向{n:2}
这个对象,即运算完成后,a
指向{n:2}
,因此在连等赋值后打印a.x
是undefined
。用下面这个例子更明白点第二个例子同样的道理,等式中间
b.x
中的b
指向的是{n:1}
这个对象,然而等式左边的b
指向了{n:2}
这个对象,即运算完成后,b
指向{n:2}
,因此后来打印的b
为{n:2}
,而b.x
即为{n:2}[x]
,所以是undefined