JavaScript有5种基本的数据类型,分别是:布尔、null、undefined、String和Number。这些基本类型在赋值的时候是通过值传递的方式。
值得注意的是还有另外三种类型: Array、Function和Object,它们通过引用来传递
基本数据类型
如果一个基本的数据类型绑定到某个变量,我们可以认为该变量包含这个基本数据类型的值。
ar x = 10;
var y = 'abc';
var z = null;
当我们使用=将这些变量赋值到另外的变量,实际上是将对应的值拷贝了一份,然后赋值给新的变量。我们把它称作值传递。
var x = 10;
var y = 'abc';
var a = x;
var b = y;
console.log(x, y, a, b) // 10, 'abc', 10, 'abc'
a和x都包含10,b和y都包含'abc',并且它们是完全独立的拷贝,互不干涉。如果我们将a的值改变,x不会受到影响。
var x = 10;
var y = 'abc';
var a = x;
var b = y;
a = 5;
b = 'def';
console.log(x, y, a, b); // 10, 'abc', 5, 'def'
引用传递
对象是通过引用传递,而不是值传递。也就是说,变量赋值只会将地址传递过去。
var reference = [1];
var refCopy = reference;
变量 | 地址 | 对象 |
---|---|---|
reference | #001 | [1, 2] |
refCopy | #001 |
函数参数
当我们将基本类型数据传入函数,函数会将这些数据拷贝赋值给函数的参数变量。
var hundred = 100;
var two = 2;
function multiply(x, y) {
return x * y;
}
var twoHundred = multiply(hundred, two);
hundred的值拷贝给变量x,two的值拷贝给变量y。
const obj = {
age: 10
}
function adjust(obj){
obj.age = 20
obj = {
age: 30
}
return obj
}
let obj2 = adjust(obj)
console.log(obj.age) //20
console.log(obj2.age) //30