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日

相关文章

  • 如何使用JS在HTML中自定义字符串格式化

    要在HTML中自定义字符串格式化,我们通常使用JavaScript来实现。以下是使用JS在HTML中自定义字符串格式化的完整攻略: 1. String.prototype.format 方法 Javascript 的字符串对象 String.prototype 中提供了一个 format 方法,可以通过占位符的方式快速格式化字符串。 代码示例: const …

    JavaScript 2023年5月19日
    00
  • Javascript Math toSource() 方法

    JavaScript中的Math对象并没有toSource()方法。toSource()方法是JavaScript中的一个对象方法,用于返回一个表示对象源代码的字符串。但是,Math对象是一个内置对象,不是一个普通的JavaScript对象,因此不支持toSource()方法。 作为替代,我们可以使用console.dir()方法来查看Math对象属性和方法…

    JavaScript 2023年5月11日
    00
  • 用js读写cookie的简单方法(推荐)

    以下是详细讲解“用js读写cookie的简单方法(推荐)”的完整攻略: 1. 什么是cookie 1.1 定义 cookie 是一种在客户端存储数据的小文件。在 HTTP 协议中,Web 服务器可以向客户端发送一个 Set-Cookie 的响应头,来告诉客户端保存这个 cookie。之后客户端每次请求响应都会带上这个 cookie,用来告诉服务器用户是谁。 …

    JavaScript 2023年6月11日
    00
  • javascript实现弹出层效果

    实现弹出层效果通常使用javascript的模态框(Modal)实现。以下是步骤: 步骤一:构建HTML结构 为弹出层准备一个HTML结构,该结构包括带有唯一标识符的背景层和弹出层本身。如下所示: <div id="overlay"> <div id="popup"> <h2>这是弹…

    JavaScript 2023年6月11日
    00
  • 100多个基础常用JS函数和语法集合大全

    100多个基础常用JS函数和语法集合大全 简介 本文是一篇关于JavaScript函数和语法的大全,涵盖了100多个常见的、基础的JavaScript函数和语法,并包含了详细的示例和用法,旨在帮助初学者和进阶者掌握JavaScript的基本知识。 常见函数 1. alert() alert() 是一个经典的JavaScript函数,用于弹出一个消息框,通常用…

    JavaScript 2023年5月27日
    00
  • JS 日期操作代码,获取当前日期,加一天,减一天

    JS是一种强大而灵活的脚本语言,用来操作日期也很简单。下面是获取当前日期、加一天、减一天的完整攻略。 获取当前日期 获取当前日期很简单,使用JS内置对象Date即可。 var today = new Date(); console.log(today); 上述代码会输出当前日期的完整信息,包括年月日、时分秒和时区等详细信息。 输出结果示例: Tue Aug …

    JavaScript 2023年5月27日
    00
  • Mybatis常用分页插件实现快速分页处理技巧

    Mybatis常用分页插件实现快速分页处理技巧 背景 在使用Mybatis作为应用程序的ORM框架时,我们通常需要实现对数据库表的快速分页查询。而Mybatis常用的分页插件可以帮助我们快速实现这个功能。 准备工作 在使用分页插件之前,我们需要先将其引入到项目中,并在Mybatis的配置文件中进行配置。 引入分页插件 在Maven项目中,我们可以在pom.x…

    JavaScript 2023年6月10日
    00
  • javascript类型转换示例

    下面我将为你详细讲解“javascript类型转换示例”的完整攻略,包含两个示例说明。 JavaScript类型转换示例 在JavaScript中,类型转换是一个非常重要的概念。在编写JavaScript代码时,我们可能会遇到需要进行类型转换的情况。下面,我将为您介绍两个JavaScript类型转换示例。 示例1: 首先,我们来看一个JavaScript类型…

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