漫画|有趣的了解一下赋值、深浅拷贝

简介: 笔记

什么是赋值?

将某一数值赋给某个变量的过程,称为赋值。将确定的数值赋给变量的语句叫做赋值语句。所赋“值”可以是数字,也可以是字符串和表达式等。

50.png

赋值标识符

简单的赋值,都是由'='表示。复合赋值使用'/'、'+'、'-'后面跟'='表示。这些赋值标识符,也是常说的“简写样式”。

51.png

每个数学赋值标识符都是独一无二的:

52.png

 

 

  • +=(加)
  • -=(减)
  • *=(乘)
  • /=(除)
  • %=(取余)
  • <<=(左移)
  • >>=(右移)
  • >>>=(无符号又移)

(注意,数学赋值标识符只有简写作用,无提升性能作用)

传值和传址

赋值包含了传值和传址两种赋值方式。传值是基本数据的赋值方式,因为基本数据的值存放于栈中。传值是引用数据的赋值方式,因为引用数据的值存放在堆中。

53.png

(上图为基本数据赋值传值方式,基本数据类型:stringnumberbooleanundefinednullsymbol。

54.png

 

(上图为引用数据赋值是传址的方式,由于引用数据的值只是指针指向同一堆地址,如果操作其中一个,其余都会被联动。)

55.png

 

(为variable name偷偷添加一个symbol。天呐variable name2居然也能调用!!!)

56.png

 

variable name生气了怎么办呢?

拷贝

为解决该问题,就需要使用到拷贝。  也可以理解为只有在是引用性数据类型时,才用到深浅拷贝。

浅拷贝

先分析一下浅拷贝是否可用。浅拷贝:回先创建一个新的对象,该对象有原始值的精确拷贝,但是属性值的拷贝是通过赋值来完成的。 也就会有传说中的“只拷贝表面上的”一层。如果修改的是复杂类型值本身,还是会相互影响。

 

57.png

这不行,不符合 variable name的需求!

深拷贝

啊哦,浅拷贝并不能完全满足variable name不想让variable name2拿到它新收集到的数据。或许我们需要看看其他方法:深拷贝。

 

 

58.png

 

 

(上图为深拷贝后的数据存放图)

深拷贝后,会拷贝所有的属性,并将拷贝属性指向的动态分配的内存。深拷贝会另外创建一个一模一样的堆,新对象和原对象不共享堆内存。所以修改对象的值,也不会相互影响。当对象和它所引用的对象一起拷贝时即发生深拷贝。可以使用递归、JSON.parse()与JSON.stringify()测试查看效果。

 

尝试一下,用深拷贝来完成variable name的需求:

59.png

 

完全可以!!!

 

 

(注意,文章图中箭头方向不代表指针方向!!variable name以及variable name2只是代表变量名的英文!!)


目录
相关文章
|
2月前
|
存储 编译器 C语言
烫烫烫手的结构体大小计算来咯,很烫哦,慢慢消化。自定义类型(一)
烫烫烫手的结构体大小计算来咯,很烫哦,慢慢消化。自定义类型(一)
22 2
|
7月前
|
存储 索引 Python
什么是数组,什么是对象,并说出他们的区别
什么是数组,什么是对象,并说出他们的区别
51 6
|
7月前
|
C++
C++什么是深浅拷贝,深浅拷贝的区别?
C++什么是深浅拷贝,深浅拷贝的区别?
|
编译器 C++
【C++从0到王者】第五站:类和对象(中)const和取地址运算符重载
【C++从0到王者】第五站:类和对象(中)const和取地址运算符重载
75 0
|
人工智能 JavaScript 前端开发
为什么要用深浅拷贝、什么是深浅拷贝、以及如何实现
首先我们要明白一点,js中数据类型分为: 基本数据类型 (Number, String, Boolean, Null, Undefined, Symbol) 对象数据类型 ( Object )** 引用数据类型的值是保存在栈内存和堆内存中的对象。栈区内存保存变量标识符和指向堆内存中该对象的指针。当寻找引用值时,解释器会先寻找栈中的地址。然后根据地址找到堆内存的实体
119 0
为什么要用深浅拷贝、什么是深浅拷贝、以及如何实现
|
存储 安全 编译器
【C++精华铺】3.C++入门 引用(const)、内联函数
以值作为参数或者返回类型,在传参和返回的期间,变量不会直接传递实参或返回变量本身,而传递的是实参或者变量的一份临时拷贝,如果需要拷贝的类型特别大的时候,效率是极低的。常引用就是const关键字修饰的引用,但是我们在使用常引用是会遇到各种报错,其实就是权限放大缩小的问题,所谓权限就是是否具有读或者写的权力,在C++中引用支持权限缩小但不支持权限放大。,与传统的定义变量不同,传统的定义变量是新开一份空间来存储数据,而引用则是给一个已经存在的空间起一个别名,它和引用的变量共用同一份空间。
|
存储 JavaScript 数据处理
深浅拷贝问题
深浅拷贝问题
72 0
AcWing语法基础课笔记 第七章 类、结构体、指针、引用
类可以将变量、数组和函数完美地打包在一起。 ——闫学灿
110 0
|
JavaScript 前端开发
【JavaScript】this关键字的指向问题(五千字详解)
【JavaScript】this关键字的指向问题(五千字详解)
222 0
【JavaScript】this关键字的指向问题(五千字详解)