在JavaScript中,变量的赋值可以大致分为两类:引用赋值和按值赋值。这种分类主要基于JavaScript的数据类型,特别是原始类型(Primitive Types)和对象类型(Object Types)。
- 按值赋值(Value Assignment)
按值赋值通常发生在处理原始类型的数据时,这些原始类型包括:Number
、String
、Boolean
、Null
、Undefined
、Symbol
和 BigInt
。当你把一个原始类型的值赋给一个变量时,JavaScript实际上是在内存中创建了这个值的一个新副本,并把这个副本的地址赋给了变量。因此,如果你之后改变了这个变量的值,它不会影响到之前赋值的原始数据。
例如:
let a = 5;
let b = a; // b 现在是 5,但它是 a 的一个独立副本
a = 10; // 改变 a 的值不会影响 b
console.log(b); // 输出 5
- 引用赋值(Reference Assignment)
与原始类型不同,对象类型(如 Object
、Array
、Function
等)在赋值时采用的是引用赋值的方式。当你把一个对象赋给一个变量时,JavaScript并不是在内存中创建一个新的对象副本,而是创建一个指向该对象内存地址的引用,并把这个引用赋给变量。因此,如果你通过一个变量修改了对象的属性或内容,那么所有引用这个对象的变量都会看到这个变化。
例如:
let obj1 = { value: 1 };
let obj2 = obj1; // obj2 现在引用的是 obj1 所引用的同一个对象
obj1.value = 2; // 通过 obj1 修改对象的属性会影响 obj2
console.log(obj2.value); // 输出 2
总结:
- 按值赋值:适用于原始类型,赋值时创建值的副本。
- 引用赋值:适用于对象类型,赋值时创建指向对象的引用。
这种赋值行为的不同是JavaScript中一个重要且有时可能导致混淆的概念,特别是在处理对象和原始类型时。了解这一点对于避免常见的编程错误和写出更可预测的代码至关重要。
标签:obj1,按值,对象,JavaScript,JS,引用,赋值 From: https://www.cnblogs.com/ai888/p/18638441