美文网首页
javascript 连等赋值问题(一)

javascript 连等赋值问题(一)

作者: Kitty__Cat | 来源:发表于2018-03-18 22:35 被阅读0次

请看下面代码

var a = {n: 1};  
var b = a;
a.x = a = {n: 2};

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

刚看到输出结果的时候,确实很懵逼,研究了半天,才弄懂了!!!

关键在于,其实

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

相当于:

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

那么,从头分析:

【值 vs 引用】

1、如果变量存储的是原始值,这个变量就是【值类型(基本类型)】
2、如果变量存储的是内存地址,这个变量就是【引用类型(复杂类型)】,也就是对象。

值 类 型:在赋值的时候,拷贝值。
引用类型:在赋值的时候,只拷贝地址。
var a = {n: 1}; 
将复杂数据类型的对象 {n: 1} ,赋值给变量a,变量a保存的是对象的内存地址;

var b = a;
将变量a,赋值给变量b
其实:是将a保存的内存地址拷贝了一份,赋值给了b,此时,a 和 b都保存的是【同一份地址】,都指向{n: 1}

a.x = {n: 2};
给a创建了一个属性x,并保存了新对象{n: 2}的地址
注意:a 和 b 都存储着「同一块内存」的地址!那么,当我们修改 a.x 的时候,b.x 也会跟着变!!!
所以,console.log(b.x); // {n: 2}

a = {n: 2};
将新对象{n: 2}的地址,赋值给a
此时的a,已经指向新对象{n: 2},【而这个对象,并没有x属性】
所以,console.log(a.x); // undefined
如有不对之处,欢迎批评指正,共同进步!...

相关文章

  • JavaScript连等赋值问题

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

  • javascript 连等赋值问题(一)

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

  • JAVA 连等赋值问题

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

  • JavaScript 连等问题

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

  • JavaScript中的连等赋值例题

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

  • js连等赋值

    赋值等式从左至右进行引用解析,然后从右至左进行赋值操作

  • Javascript运算符

    JavaScript 运算符 JavaScript 运算符用于赋值,比较值,执行算术运算等。 JavaScript...

  • 连等赋值的坑

    https://segmentfault.com/q/1010000002637728

  • JS基础 连等赋值

    测试代码如下: 相信绝大多数人第一反应如下: 开辟内存空间* 存储{ n: 1 } 并将变量a指向该内存空间; 变...

  • 什么是解构赋值?解构赋值的用途有哪些?

    什么是解构赋值?解构赋值的用途有哪些? 1.什么是解构赋值? ①定义: 解构赋值语法是一种 Javascript ...

网友评论

      本文标题:javascript 连等赋值问题(一)

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