JavaScript对象拷贝与赋值操作实例分析

JavaScript对象拷贝与赋值操作实例分析

在JavaScript中,对象的赋值与拷贝是一个非常重要的话题。这篇文章将会分析对象的赋值与拷贝两种操作的差异以及使用场景,并通过实例展示它们的不同表现。

基本数据类型与引用数据类型

在JavaScript中,数据类型可分为基本数据类型和引用数据类型。基本数据类型包括NumberStringBooleannullundefined,而引用数据类型包括ObjectArrayFunctionDate等等。

  • 基本数据类型:基本数据类型的变量储存的是实际的值,通过变量对基本类型数据进行操作时,修改的是变量本身的值。
let a = 1;
let b = a;
b = 2;
console.log(a); // 1
console.log(b); // 2
  • 引用数据类型:引用数据类型的变量储存的是一个指针,指向该数据类型在内存中被储存的地址,通过变量对引用类型数据进行操作时,修改的是内存中的数据。
let arr1 = [1, 2];
let arr2 = arr1;
arr2.push(3);
console.log(arr1); // [1, 2, 3]
console.log(arr2); // [1, 2, 3]

对象的赋值与拷贝

赋值操作

在JavaScript中,对象的赋值操作是指将一个对象的引用赋值给另一个变量。当两个变量引用的是同一对象时,其中一个变量修改该对象,另一个变量也会受到影响。

示例代码如下所示:

let obj1 = {
  name: 'John',
  age: 20
};
let obj2 = obj1;
obj2.age = 22;
console.log(obj1); // { name: 'John', age: 22 } 修改age变量值
console.log(obj2); // { name: 'John', age: 22 }

在上述示例中,当修改obj2中的age值时,obj1中对应的值也发生了改变。因为obj1obj2都指向同一个内存地址。

拷贝操作

在JavaScript中,对象的拷贝是指将一个对象的值复制到另一个对象中。当拷贝完成后,两个对象之间互不影响。

浅拷贝

浅拷贝是将一个对象的属性值拷贝到一个新的对象中,但是新对象的属性值仍然是对原对象属性值的引用。

举个例子:

let obj1 = {
  name: 'John',
  age: 20
};
let obj2 = {};
for(let key in obj1){
  if(obj1.hasOwnProperty(key)){
    obj2[key] = obj1[key];
  }
}
obj2.age = 22;
console.log(obj1); // { name: 'John', age: 20 }
console.log(obj2); // { name: 'John', age: 22 }

在上述示例中,当修改obj2中的age值时,obj1中对应的值并没有改变,并且obj2也没有对obj1产生影响。

深拷贝

深拷贝是指递归地将一个对象及其子对象进行拷贝,完全复制一个新对象,新对象跟原对象不存在任何关系。

下面示例演示了如何通过JSON.parse(JSON.stringify(obj))实现深拷贝:

let obj1 = {
  name: 'John',
  age: 20,
  friend: {
    name: 'Tom',
    age: 18
  }
};
let obj2 = JSON.parse(JSON.stringify(obj1));
obj2.friend.age = 20;
console.log(obj1); // { name: 'John', age: 20, friend: { name: 'Tom', age: 18 } }
console.log(obj2); // { name: 'John', age: 20, friend: { name: 'Tom', age: 20 } }

在上述示例中,当修改obj2中的friend对象的age属性时,obj1中的对应值仍然保持不变,它们互不影响。

总结

  • 对于基本数据类型,赋值和拷贝的操作保持相同的效果,即变量之间相互独立,修改其中一个变量不会影响其他变量。
  • 对于引用数据类型,赋值和拷贝的操作效果不同。赋值是将两个变量引用同一个内存地址,它们之间存在关联。而拷贝是将一个对象的值复制到另一个对象中,使它们变得完全相互独立。
  • 对于浅拷贝,虽然生成了一个新的对象,但是新对象的属性仍然是对原对象属性的引用,因此当修改新对象属性时也会影响原对象。
  • 对于深拷贝,递归地将原对象及其子对象进行复制,生成一个新的对象,彻底解除了原对象与新对象之间的关联,保证二者相互独立。

以上就是JavaScript对象拷贝与赋值操作的详细分析。该攻略中包含了基本数据类型与引用数据类型的区别,赋值与拷贝两种操作的差异以及使用场景,并通过实例演示了浅拷贝和深拷贝两种实现方式的不同表现。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript对象拷贝与赋值操作实例分析 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • JavaScript版本迷局介绍

    标题: JavaScript版本迷局介绍 1. 为什么会存在JavaScript版本问题 在一些JavaScript项目中,我们经常听到一些版本的说法,如“ES6”、“ES8”、“Node.js v8”等等,这些版本实际上指的是不同的JavaScript规范。由于JavaScript语言的快速发展,JavaScript不同版本之间出现了一些规范的差异,这就导…

    JavaScript 2023年5月18日
    00
  • JS操作Cookie写入和读取实例代码

    下面是关于“JS操作Cookie写入和读取实例代码”的完整攻略。 什么是Cookie Cookie是网站可以存储在用户计算机中的小文件。这些文件包含有关用户访问网站的信息,例如登录凭据、购物车中的项目和其他首选项。 为何要使用Cookie 可以使用Cookie提供个性化用户体验、记录用户偏好并跟踪用户行为,部分网站为页面访问量和跟踪广告效果也使用Cookie…

    JavaScript 2023年6月11日
    00
  • Springboot通过lucene实现全文检索详解流程

    下面我将详细讲解Springboot通过lucene实现全文检索的完整攻略流程。 1. 环境准备 首先需要在项目中集成lucene相关的依赖。可以通过Maven或Gradle进行配置。这里以Maven为例,pom.xml文件中加入以下依赖: <dependency> <groupId>org.springframework.boot&…

    JavaScript 2023年6月11日
    00
  • js数组的基本使用总结

    JS数组的基本使用总结 什么是数组 数组是一种特殊的对象,可以用来存储一组有序的数据。数组的每个元素都有一个索引,以此来确定元素在数组中的位置。 创建和使用数组 在JavaScript中,我们可以使用以下两种方式来创建数组: 直接声明 let arr = [1, 2, 3, 4, 5]; 通过构造函数创建 let arr = new Array(1, 2, …

    JavaScript 2023年5月27日
    00
  • 设置cookie指定时间失效(实例代码)

    设置 cookie 失效时间是保持 Web 应用程序状态的关键技术之一。下面是如何在 PHP 中设置指定时间失效的 cookie 的完整攻略: 步骤 1:创建 cookie 要在 PHP 中设置 cookie,可以使用 setcookie() 函数。该函数的语法如下: setcookie(name, value, expire, path, domain, …

    JavaScript 2023年6月11日
    00
  • 详谈JS中数组的迭代方法和归并方法

    详谈JS中数组的迭代方法和归并方法 什么是迭代方法? 在JavaScript中,迭代方法是一种对数组进行操作的函数,在数组中迭代每一个元素并执行指定的操作,最终返回一个新的数组或其他值。常见的迭代方法有forEach()、map()、filter()、some() 和 every() 等。 示例 1:forEach() forEach() 方法用于遍历每个元…

    JavaScript 2023年5月27日
    00
  • javascript 跨浏览器的事件系统

    JavaScript 跨浏览器的事件系统是指在各种浏览器下实现统一的事件,保证我们开发的代码能够在各种浏览器下都能正确的运行,不受浏览器差异的影响。以下是实现 JavaScript 跨浏览器的事件系统的完整攻略。 创建跨浏览器的事件处理程序 我们可借助 W3C 的标准事件模型来创建跨浏览器的事件处理程序,代码如下: //创建事件处理程序 function a…

    JavaScript 2023年6月10日
    00
  • js开发中的页面、屏幕、浏览器的位置原理(高度宽度)说明讲解(附图)

    在JavaScript开发中,要理解页面、屏幕和浏览器的位置原理是非常重要的,这是因为在布局和交互方面都与这些位置相关联。下面将从高度和宽度两个方面详细讲解。 页面高度和宽度 在JavaScript中,可以通过下面的代码来获取页面的高度和宽度: var pageHeight = document.documentElement.scrollHeight; v…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部