美文网首页
1.引用类型赋值问题

1.引用类型赋值问题

作者: DCbryant | 来源:发表于2017-08-01 14:11 被阅读53次
var a = {n:1}//1
var b = a//2
a.x = a = {n:2}//3
console.log(a.x)//undefined
console.log(b.x)//{n:2}

前提基础知识点:

  1. 引用类型赋值:
  • 引用类型复制的时候,两个变量作为指针指向同一个对象
  • 变量赋值的时候是将该变量指向另一个对象
  • 通过点表示法,访问修改属性的时候,所指向的对象地址不变
  1. 操作符
  • 点操作符号的优先级很高,仅次于(),方向是从左到右
  • 赋值操作符的方向是从右到左。

操作符参考链接:MDN

现在来分析上面的代码,1、2两句将a、b这两个变量都指向{n:1}(对象A)这二个对象,主要令人困惑的是第三句代码,由于.操作符的优先级a.x最先执行,即是给{n:1}添加一个x属性,因此它变成{n:1,x:undefined}(对象A),然后再执行a = {n:2},即是将a指向另一个对象{n:2}(对象B),此时a和b已不是指向同一个对象了,最后执行a.x = a,可以理解为将对象A的属性x指向了对象B。因此

a.x = undefined
b.x = {n:2}

画一个图一目了然:


内存图

相关文章

  • 1.引用类型赋值问题

    前提基础知识点: 引用类型赋值: 引用类型复制的时候,两个变量作为指针指向同一个对象 变量赋值的时候是将该变量指向...

  • C#值类型和引用类型讲解

    1.什么是值类型和引用类型 值类型:直接存储其值,赋值的的时候是传递拷贝。引用类型:存储对其值的引用,赋值的时候是...

  • 1.变量类型和计算

    变量类型(值类型、引用类型) 1.值类型的特点:不会因为赋值相互干扰 2.引用类型{对象、数组、function}...

  • JS中容易出错的点

    基本类型和引用类型的赋值问题 上例很好地证明了:基本类型值按值传递,引用类型值按引用传递 同名变量和方法覆盖问题 ...

  • java一快速入门

    变量 1.基本类型的 2引用类型 1.基本类型的 可以重新赋值,赋值给其他变量, 整数类型:byte(1) ,sh...

  • JS变量类型和计算

    变量类型 1.值类型 (赋值之间不会相互影响) 2.引用类型 :对象,数组,函数 (赋值是变量指针,不是真正的...

  • 面向对象第二天

    值类型与引用类型 值类型:赋值是复制数据内容。 引用类型:赋值的是存储地址。 原型: 函数原型里包含prototy...

  • 值类型和引用类型的特征

    值类型和引用类型的赋值 值类型赋值,直接将值复制一份 上面两句代码,在内存中的体现为: 引用类型赋值,是将地址复制...

  • JS 数组赋值后原数据随赋值后的数据的变化而变化

    JS在赋值时,原始类型(比如字符串)是复制值,引用类型(比如关联数组)是复制引用。引用类型的赋值相当于地址拷贝,赋...

  • iOS面试题

    1. struct和class的区别 swift中,class是引用类型,struct是值类型。值类型在传递和赋值...

网友评论

      本文标题:1.引用类型赋值问题

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