title: JS对象(2)值传递与引用传递
date: 2016-10-05
tags: JavaScript
0x00 数据类型与数据结构
我们需要先回忆一下。
JavaScript 是一种弱类型或者说动态语言。这意味着你不用提前声明变量的类型,在程序运行过程中,类型会被自动确定。
此外,最新的 ECMAScript 标准定义了7中数据类型:
6种 原始类型: Boolean
, Null
, Undefined
, Number
, Stirng
, Symbol
一种复杂类型(引用类型)对象: Object
.
JavaScript 一切皆对象(除了6中原始类型)
在 JS 中,所有除 Object 以为的类型都是不可变的。比如,JS 中字符串是不可变的,任何对字符串的操作一定返回了一个新字符串,原始字符串并没有被改变。
0x02 值传递与引用传递
通过上述的理解要明白 Javascript 中值传递与引用传递就太简单了,下面的两个超级简单的 demo 可以诠释一切。
// 值传递
var a = 2;
function foo(b){
b +=10;
}
foo(a)
console.log(a)
// 2
// 原始 a 的值没有发生改变
值传递:
只将值进行传递,与原变量无关,值会被复制一份,保存在内存中另一个不同的位置。
当我们修改传递后的值时,修改的是内存中新的位置,而原变量不会被影响,还是原来的值。
这种情况往往出现在6中原始类型中。
//引用传递
var a = [2];
function foo(b){
b.push(10)
}
foo(a)
console.log(a)
// [2, 10]
// 原始 a 的值被改变了
引用传递:
将内存地址进行传递,相当于把原变量完整的传递过来。
当我们修改传递后的值时,修改的是内存中原来的位置,会对原变量造成影响。
这种情况往往出现在对象上。
利用引用传递的特性,我们有了实现面向对象的基础
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。