首页 >web前端 >js教程 >了解 JavaScript 对象引用和复制 - 简要说明

了解 JavaScript 对象引用和复制 - 简要说明

Linda Hamilton
Linda Hamilton原创
2024-12-22 02:07:21298浏览

Understand JavaScript Object References and Copying - Brief Explanation

在 JavaScript 中使用对象时,理解 对象引用对象复制 之间的区别至关重要。以下是详细概述:


对象引用

  1. 对象是引用类型
    • 将对象分配给变量时,您分配的是对存储该对象的内存位置的引用,而不是对象本身的副本。
    • 通过一个引用修改对象会影响对同一对象的所有引用。
   let obj1 = { name: "Alice" };
   let obj2 = obj1; // obj2 now references the same object as obj1
   obj2.name = "Bob";
   console.log(obj1.name); // Output: "Bob"
  1. 平等检查
    • 如果两个变量引用内存中的同一对象,则它们相等,而不是它们的内容相同。
   let a = { key: "value" };
   let b = { key: "value" };
   console.log(a === b); // Output: false (different references)
   let c = a;
   console.log(a === c); // Output: true (same reference)

对象复制

对象复制主要有两种类型:浅复制深复制

1.浅拷贝

  • 浅拷贝创建一个新对象,但它只复制第一层属性。嵌套对象或数组仍然被引用,而不是重复。

浅复制技术:

  • Object.assign():

     let original = { name: "Alice", details: { age: 25 } };
     let copy = Object.assign({}, original);
     copy.details.age = 30;
     console.log(original.details.age); // Output: 30 (shared reference)
    
  • 扩展运算符 (...):

     let original = { name: "Alice", details: { age: 25 } };
     let copy = { ...original };
     copy.details.age = 30;
     console.log(original.details.age); // Output: 30 (shared reference)
    
  • 这两种方法都会创建浅表副本,这意味着嵌套对象仍然是链接的。

2.深度复制

  • 深层复制复制整个对象,包括嵌套结构。新对象完全独立于原始对象。

深度复制技术:

  • JSON.parse() 和 JSON.stringify():

     let original = { name: "Alice", details: { age: 25 } };
     let copy = JSON.parse(JSON.stringify(original));
     copy.details.age = 30;
     console.log(original.details.age); // Output: 25
    
    • 限制:此方法不处理函数、未定义、Infinity 或特殊对象(如 Date 或 RegExp)。
  • StructuredClone()(现代 JavaScript):

     let original = { name: "Alice", details: { age: 25 } };
     let copy = structuredClone(original);
     copy.details.age = 30;
     console.log(original.details.age); // Output: 25
    
    • 此方法可以处理大多数边缘情况(例如循环引用),但在较旧的环境中不受支持。
  • 自定义库

    • 使用像lodash这样的库:
       let obj1 = { name: "Alice" };
       let obj2 = obj1; // obj2 now references the same object as obj1
       obj2.name = "Bob";
       console.log(obj1.name); // Output: "Bob"
    

汇总表

Action Result
Assignment (=) Creates a reference. Changes to one variable affect the other.
Shallow Copy Creates a new object but retains references for nested objects.
Deep Copy Creates a completely independent object, including nested structures.
行动

结果

标题> 赋值(=) 创建引用。对一个变量的更改会影响另一个变量。 浅复制 创建一个新对象,但保留嵌套对象的引用。 深度复制 创建一个完全独立的对象,包括嵌套结构。 表>
理解这些概念可以帮助您在使用 JavaScript 中的对象时避免意外的副作用!

以上是了解 JavaScript 对象引用和复制 - 简要说明的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn