在JavaScript中,变量赋值可以分为两种情况:基本数据类型(如字符串、数字、布尔值、null、undefined和Symbol)的赋值和引用数据类型(如对象、数组和函数)的赋值。
基本数据类型的赋值是按值传递的。这意味着当你将一个基本数据类型的变量赋值给另一个变量时,实际上是将该值的副本赋给了新变量。因此,两个变量是完全独立的,修改其中一个不会影响另一个。
let a = 10;
let b = a; // b现在是a的副本
b = 20; // 修改b的值
console.log(a); // 输出: 10
console.log(b); // 输出: 20
引用数据类型的赋值是按引用传递的。这意味着当你将一个引用数据类型的变量赋值给另一个变量时,实际上是将该对象的引用(内存地址)赋给了新变量。因此,两个变量指向的是同一个对象,修改其中一个会影响另一个。
let obj1 = { name: 'Alice' };
let obj2 = obj1; // obj2现在引用的是同一个对象
obj2.name = 'Bob'; // 修改obj2的属性
console.log(obj1.name); // 输出: Bob
console.log(obj2.name); // 输出: Bob
let obj1 = { name: 'Alice' };
let obj2 = JSON.parse(JSON.stringify(obj1)); // 深拷贝
obj2.name = 'Bob';
console.log(obj1.name); // 输出: Alice
console.log(obj2.name); // 输出: Bob
_.cloneDeep
)来处理深拷贝。const _ = require('lodash');
let obj1 = { name: 'Alice' };
obj1.self = obj1; // 循环引用
let obj2 = _.cloneDeep(obj1); // 使用lodash处理深拷贝
console.log(obj2); // 输出: { name: 'Alice', self: [Circular] }
通过理解这两种赋值方式的区别和应用场景,可以更好地进行JavaScript编程,避免一些常见的错误。
领取专属 10元无门槛券
手把手带您无忧上云