在许多编程语言中,传递参数和赋值是通过值的直接复制或者引用复制完成的。在JavaScript中,对于值是直接进行复制还是引用复制在语法上是没有区别的,完全是根据值的类型来决定的。
在JavaScript中,简单值总是通过值的直接复制来进行赋值传递的(null,undefined,字符串,数字,布尔,symbol),而复合值(对象(包括数组等)和函数)总是通过引用复制的方式来进行赋值和传递的。
下面的例子能加深理解:
var a = 1;var b = a; b++; a; //1b; //2var c = [1,2];var d = c; d.push(3); c; //[1,2,3]d; //[1,2,3]
数组的浅拷贝
上面例子对于数组的赋值操作就是数组的浅拷贝,不难发现问题当一个数组改变的时候,其他赋值的数组也会改变,在很多类似备份的情况中,这并不是我们想要的结果。
延伸阅读
- ssh框架 2016-09-30
- 阿里移动安全 [无线安全]玩转无线电——不安全的蓝牙锁 2017-07-26
- 消息队列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 论文笔记【图片目标分割】 2017-07-26
- 词向量-LRWE模型-更好地识别反义词同义词 2017-07-26
- 从栈不平衡问题 理解 calling convention 2017-07-26
- php imagemagick 处理 图片剪切、压缩、合并、插入文本、背景色透明 2017-07-26
- Swift实现JSON转Model - HandyJSON使用讲解 2017-07-26
- 阿里移动安全 Android端恶意锁屏勒索应用分析 2017-07-26
- 集合结合数据结构来看看(二) 2017-07-26