返回
变量赋值中的引用
前端
2023-11-09 19:28:54
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 中,变量赋值是通过引用传递的,数组和字符串是引用类型,其他值类型是值类型。我们可以使用浅拷贝和深拷贝来复制对象。