第8题:连续赋值与优先级的“坑”’
2026/7/28 17:12:44 网站建设 项目流程

题目:下面代码输出结果是什么?

var a = {n: 1}; var b = a; a.x = a = {n: 2}; console.log(a.x) // undefined console.log(b.x)// {n: 2}

这题容易入坑,稍不用心就会得出{n: 2}, undefined的结果。但答案却是undefined,{n:2}

思路

这道题的关键在于优先级(.的优先级大于 = ),说到这里你可能就会恍然大悟。

  • 首先,变量a和b同时引用对象{n:1}。
  • 接着执行a.x = a = {n: 2}语句,尽管赋值是从右到左,但是.的优先级高于 = ,所以先执行a.x,那么此时变量a和b引用的对象{n:1}新增了一个属性x,但没有值。即a和b的引用为{ n: 1, x: undefined}
  • 再从右到左执行赋值语句,执行a = {n:2},说明a的引用改变,指向了新的对象{n : 2},而b的引用没有变,还是 原来的{n:1, x=undefined}.
  • 执行a.x = {n:2}时,而此时的a.x是旧的a的引用对象,即b.x({n:1, x=undefined})。所以此时x为{n:2} 则b的引用为{n:1, x:{n:2} }。

梳理一下,最终a指向{n:2},b指向{n:1, x: {n:2}},所以a.x返回undefined,b.x返回{n:2}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询