Javascript 中有两种基本数据类型;值类型(Value Types) 和 引用类型(Reference Types)。
值类型包括:
- Number
- String
- Boolean
- Symbol
- undefined
- null
引用类型包括:
- Object
- Function
- Array
值类型和引用类型有什么区别,请看下面例子:
let x = 10;
let y = x;
x = 20;
我们现在检验下 x 和 y 分别是什么值:
x
>>> 20
y
>>> 10
可见 x 和 y 是相互独立的。当把 x 赋值给 y 的时候,只是把 x 的值复制给了变量 y。
下面我们来试试使用引用类型会发生什么。
let x = { value: 10 };
let y = x;
x.value = 20;
检验 x 和 y 的值:
x
>>> {value: 20}
y
>>> {value: 20}
可见,当我们修改了 x 对象后 y 对象也会相应变化。因为 x 和 y 变量只是指向了对象的内存地址。当我把 x 赋值给 y 的时候,只是让 y 也指向了相关对象。
总结来说:值类型复制值,对象的引用类型复制引用。
再看下一个例子:
let number = 10;
function increase(number) {
number++
};
increase(number);
console.log(number);
// 执行结果:
10
值类型 number 传入到函数 increase 时,只是复制了它的值给函数的本地参数,所以函数的执行并不会改变 number。
下面再看看使用引用类型:
let number = { value: 10 };
function increase(number) {
number.value++
};
increase(number);
console.log(number);
// 执行结果:
// {value: 11}
当对象作为参数传递给函数时,是以引用的方式传递的。函数内的参数 number 和 外面的 number 指向了同一个对象。所以函数内修改 number 会使函数外的 number 也改变。
网友评论