返回

变量赋值中的引用

前端

JavaScript 中数组、字符串和值的引用

大家好哇,今天来记录一下 javascript 中的数组、字符串和值的引用。提前说明哦,这是一篇前端笔记类的文章,属于个人记录。各位高人请绕道勿喷,谢谢~

在 javascript 中,变量赋值是通过引用传递的。也就是说,当我们给一个变量赋值时,实际上是将该值的内存地址赋给了该变量。因此,如果我们对变量的值进行修改,实际上是对其所引用的内存地址的值进行修改。

数组引用

数组是一个对象,它包含一组按索引排列的值。当我们给一个数组赋值时,实际上是将该数组的引用赋给了该变量。因此,如果我们对数组中的元素进行修改,实际上是对数组本身进行修改。

const arr = [1, 2, 3];
const newArr = arr;

newArr[0] = 4;

console.log(arr); // [4, 2, 3]

字符串引用

字符串是一个原始值,它不可变。因此,当我们给一个字符串赋值时,实际上是将该字符串的值赋给了该变量。如果我们对字符串进行修改,实际上是创建了一个新的字符串,并将其赋值给该变量。

const str = 'hello';
const newStr = str;

newStr = 'world';

console.log(str); // hello

值的引用

除了数组和字符串之外,javascript 中的其他值类型都是通过值传递的。也就是说,当我们给一个值类型赋值时,实际上是将该值本身赋给了该变量。因此,如果我们对值类型进行修改,实际上是创建了一个新的值,并将其赋值给该变量。

const num = 1;
const newNum = num;

newNum = 2;

console.log(num); // 1

浅拷贝和深拷贝

在 javascript 中,我们可以使用浅拷贝和深拷贝来复制对象。浅拷贝只复制对象的引用,而深拷贝则复制对象的整个结构。

// 浅拷贝
const obj = { name: 'John', age: 20 };
const newObj = Object.assign({}, obj);

newObj.name = 'Mary';

console.log(obj); // { name: 'Mary', age: 20 }

// 深拷贝
const obj = { name: 'John', age: 20 };
const newObj = JSON.parse(JSON.stringify(obj));

newObj.name = 'Mary';

console.log(obj); // { name: 'John', age: 20 }

总结

在 javascript 中,变量赋值是通过引用传递的,数组和字符串是引用类型,其他值类型是值类型。我们可以使用浅拷贝和深拷贝来复制对象。