美文网首页
JavaScript 连等问题

JavaScript 连等问题

作者: Wensx | 来源:发表于2017-10-19 10:52 被阅读0次

问题来源

来自讨论群的代码:

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

输出为什么为undefined、{n:2}

问题分析

代码的前两行都是简单的对象引用,关键为第3行怎么理解?是不是与连等里顺序有关?
我们将第3行代码修改为a = a.x = {n:2}发现输出结果一样。

更换顺序结果
这代表这与连等顺序没有关系。

1.第1,2行代码的作用是创建一个对象{n:1}设此对象A,并将变量a,b指向A。
2.第三行a.x在赋值前发现A对象没有x属性,则创建x,值为undefined,因为b与a指向同一个对象,所以有b.x = a.x,此时A为{n:1, x: ''}
3.在进行赋值时,a与a.x、b.x(也就是A对象的x属性)会同时指向{n:2},设此对象为B。此时变量a与A.x指向了新对象B,变量b依然指向A。由于B没有x属性则为undefined。
见下列图示

逐行代码图示

0.变量提升

变量提升.png

1.a赋值指向对象{n:1}

a指向对象.png

2.var b=a,a b 都指向{n:1}

ab同时指向对象.png

3.连等

连等指向新对象.png

总结

  1. 我们在进行变量的属性赋值时实质是对变量指向的对象属性赋值。

  2. .优先级高于=

相关文章

  • JavaScript 连等问题

    问题来源 来自讨论群的代码: 输出为什么为undefined、{n:2} 问题分析 代码的前两行都是简单的对象引用...

  • JavaScript连等赋值问题

    今天逛群发现有同学问了这么一个问题image.png 其实这道题目的难点并不在引用类型相关知识点,而是在运算符优先...

  • javascript 连等赋值问题(一)

    请看下面代码 刚看到输出结果的时候,确实很懵逼,研究了半天,才弄懂了!!! 关键在于,其实 相当于: 那么,从头分...

  • JAVA 连等赋值问题

    阅读目录 一、描述 二、分析 三、总结 一、描述 关于 Java 连等赋值,例如a=b=c;我们知道它是从右往左依...

  • JavaScript中的连等赋值例题

    GitHub上有这样一道面试题 var foo={n:1}; var bar=foo; foo.x=foo={n:...

  • 2020-06-15

    javascript重构之路 • 1.减少不必要的if判断 • 2.减少变量的定义 • 3.避免使用连等(因为中间...

  • sass和compass的理解

    冲突问题文件划分发布目录 css images JavaScript 等layout 布局要求: 风格统一设...

  • 2020年需要学习的8个前端关键技能

    如今前端开发的任职要求越来越高了,不仅要掌握 javascript,熟悉vue、react等各种框架,甚至连后端和...

  • 2020年需要学习的8个前端关键技能

    如今前端开发的任职要求越来越高了,不仅要掌握 javascript,熟悉vue、react等各种框架,甚至连后端和...

  • 2020年月薪10k+必须学习的8个前端关键技能

    如今前端开发的任职要求越来越高了,不仅要掌握 javascript,熟悉vue、react等各种框架,甚至连后端和...

网友评论

      本文标题:JavaScript 连等问题

      本文链接:https://www.haomeiwen.com/subject/qdrjuxtx.html