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 的值被转变了
援用通报:
将内存地址举行通报,相当于把原变量完全的通报过来。
当我们修正通报后的值时,修正的是内存中本来的位置,会对原变量形成影响。
这类状况每每出现在对象上。
应用援用通报的特征,我们有了完成面向对象的基本