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日

相关文章

  • ASP.NET对HTML页面元素进行权限控制(三)

    下面我会详细讲解“ASP.NET对HTML页面元素进行权限控制(三)”的完整攻略。 一、前置知识 在进行 ASP.NET 对 HTML 页面元素进行权限控制之前,需要掌握以下几个知识点:- ASP.NET 基础知识,包括 ASP.NET 的工作原理、Page、Control、ViewState 等基础概念。- ASP.NET 控件,包括常用控件(如 Butt…

    JavaScript 2023年6月10日
    00
  • JavaScript 常用函数

    现在我将为您详细讲解 JavaScript 常用函数的完整攻略。 一、JavaScript 常用函数介绍 JavaScript 提供了很多函数,可以让我们更加方便的处理数据和操作 DOM。在这里,我们将介绍一些常用的 JavaScript 函数,它们在日常工作中非常常用。 1. parseInt() parseInt() 函数可以将一个字符串解析成整数。它的…

    JavaScript 2023年5月18日
    00
  • 零基础轻松学JavaScript闭包

    零基础轻松学JavaScript闭包 什么是闭包 闭包的定义 闭包是指那些能够访问自由变量的函数。自由变量是指在函数中使用,但既不是函数参数,也不是函数的局部变量的变量。 闭包 = 函数 + 函数能够访问的自由变量 闭包的作用 闭包主要有以下两个作用: 延长外部作用域中变量的声明周期。当一个函数返回了一个内部函数后,内部函数会继续保持对外部函数的作用域的引用…

    JavaScript 2023年6月10日
    00
  • JavaScript 实现日期时间转时间戳

    当我们需要对日期和时间进行处理时,时间戳是一种非常常用的方式。在 JavaScript 中,我们可以通过一些简单的方法实现日期时间转时间戳的功能。下面是详细的攻略介绍: 步骤一:获取日期时间 首先,我们需要获取要转换为时间戳的日期和时间。我们可以使用 JavaScript 的内置 Date 对象来获取当前日期和时间。比如我们可以使用如下代码获取当前时间: c…

    JavaScript 2023年5月27日
    00
  • 原生JS实现动态加载js文件并在加载成功后执行回调函数的方法

    实现动态加载 js 文件是网页开发中常见的需求,可以用于按需加载某些功能模块,减轻网页初始加载时的压力。同时,当加载完成时,需要执行相应的回调函数,以便进行后续的操作。下面是实现原生 JavaScript 实现动态加载 js 文件并执行回调函数的完整攻略: 1. 原生JS实现动态加载js文件 我们可以通过创建一个 script 标签来实现动态加载 js 文件…

    JavaScript 2023年5月27日
    00
  • JavaScript实例–实现计算器

    下面是“JavaScript实例–实现计算器”的完整攻略。 1. 需求分析 在开始编写代码之前,我们需要先确定需求。计算器需要实现以下功能: 实现加、减、乘、除四则运算 实现小数点的输入和计算 实现清除和退格功能 实现等号的计算 2. 页面结构和样式 我们需要创建一个HTML页面,包含一个输入框、数字按钮、四则运算按钮和其他功能按钮,如清除和退格按钮等。对…

    JavaScript 2023年5月27日
    00
  • 一分钟学会JavaScript中的try-catch

    下面是一分钟学会JavaScript中的try-catch的完整攻略。 什么是try-catch try-catch 是 JavaScript 中用来处理异常的一种语句结构。当在 try 块中发生了异常时,该块中代码的执行就会停止,并且 JavaScript 引擎会抛出一个 Exception(异常)。这时就需要在代码中使用 catch 块来捕获这个异常并处…

    JavaScript 2023年5月28日
    00
  • JavaScript getter setter金字塔​​​​​​​

    JavaScript getter setter金字塔是一个针对JavaScript对象的编程技巧,用于在对象中定义getter和setter方法,这些方法可以设置和获取对象的属性值。这个技巧的特点是将getter和setter方法嵌套在一起,形成一个金字塔状的结构,以实现对对象属性的高度定制和控制。 以下是完整的JavaScript getter sett…

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