在 jQuery 中复制一个 JSON 对象,有几种方法可以实现,下面分别介绍不同的实现方式。 方法一:使用 `$.extend()` 方法 `$.extend()` 方法可以用于合并多个对象。当传递一个空对象作为目标对象时,就可以实现对象的复制。 ```javascript // 原始 JSON 对象 var originalObj = { name: "John", age: 30, hobbies: ["reading", "swimming"] }; // 使用 $.extend() 复制对象 var copiedObj = $.extend({}, originalObj); // 输出原始对象和复制对象 console.log("Original Object:", originalObj); console.log("Copied Object:", copiedObj); // 修改复制对象的属性,不会影响原始对象 copiedObj.name = "Jane"; console.log("Original Object after modification:", originalObj); console.log("Copied Object after modification:", copiedObj); ``` 代码解释: - 首先定义了一个原始的 JSON 对象 `originalObj`。 - 然后使用 `$.extend({}, originalObj)` 方法创建了一个新的对象 `copiedObj`,这个新对象是 `originalObj` 的一个副本。 - 最后修改 `copiedObj` 的 `name` 属性,验证修改不会影响原始对象。 方法二:使用 `JSON.parse()` 和 `JSON.stringify()` 可以将 JSON 对象转换为字符串,然后再将字符串转换回对象,从而实现对象的复制。 ```javascript // 原始 JSON 对象 var originalObj = { name: "John", age: 30, hobbies: ["reading", "swimming"] }; // 使用 JSON.parse() 和 JSON.stringify() 复制对象 var copiedObj = JSON.parse(JSON.stringify(originalObj)); // 输出原始对象和复制对象 console.log("Original Object:", originalObj); console.log("Copied Object:", copiedObj); // 修改复制对象的属性,不会影响原始对象 copiedObj.name = "Jane"; console.log("Original Object after modification:", originalObj); console.log("Copied Object after modification:", copiedObj); ``` 代码解释: - 首先定义了一个原始的 JSON 对象 `originalObj`。 - 然后使用 `JSON.stringify(originalObj)` 将对象转换为字符串,再使用 `JSON.parse()` 将字符串转换回对象,得到 `copiedObj`。 - 最后修改 `copiedObj` 的 `name` 属性,验证修改不会影响原始对象。 需要注意的是,`JSON.parse()` 和 `JSON.stringify()` 方法有一些局限性,例如不能处理函数、正则表达式等特殊对象。 我在以往的开发过程中,碰到过以下几点需要格外小心处理的地方: 1. 使用 `$.extend()` 进行浅复制时,如果对象包含嵌套对象,修改嵌套对象会同时影响原始对象和复制对象。如果需要深复制,可以传递 `true` 作为第一个参数,如 `$.extend(true, {}, originalObj)`。 2. 使用 `JSON.parse()` 和 `JSON.stringify()` 时,会忽略对象中的函数、正则表达式等特殊属性,因为这些属性无法被序列化为 JSON 字符串。 3. 在复制对象时,要确保原始对象不包含循环引用,否则 `JSON.parse()` 和 `JSON.stringify()` 会抛出错误。 [2025-09-03 08:43:43 | AI写代码神器 | 734点数解答]