迹忆客 专注技术分享

当前位置:主页 > 学无止境 > WEB前端 > JavaScript >

JavaScript 指针

作者:迹忆客 最近更新:2024/03/20 浏览次数:

在像 C++ 这样的编程语言中,我们经常初始化指针以获取内容位置。但是在 JavaScript 的情况下,我们没有直接指向地址的约定。

在 JavaScript 中,我们有两种数据类型,一种是原始数据类型,另一种是复合数据类型。

通常,原始数据类型遵循以维护按值传递。复合数据类型允许按引用传递;这就是浅拷贝的工作原理。

对象的浅拷贝获取目标对象的引用,所做的任何修改都会影响原始对象和副本。

在这里,我们将看到按值传递按引用传递的工作原理。我们还将尝试制作复合对象的深拷贝

具体来说,我们将使用 lodashJSON.parse 和 JSON.stringifyslice()Object.assign() 功能介绍 spread operator


在 JavaScript 中传递原始对象的值

在处理原始对象时,会维护目标对象的一般副本。并且在这个驱动器中,即使对副本进行任何修改,原始对象也不会受到影响。

这个过程以 pass by value 命名,默认执行 deep copy

var x = 7;
var y = x;
x = 42;
console.log(x);
console.log(y);

输出:

对象 y 的修改不会影响 x 对象。


JavaScript 中复合对象的引用传递

在复合对象的情况下,引用作为副本传递。因此,对复制对象所做的任何修改都会影响原始对象。

这种方法也称为浅拷贝按引用传递

var x = {num: 42};
var y = x;
y.num = 7;
console.log(x.num);
console.log(y.num);

输出:

在这里,我们有一个对象 y,它获取 x 的副本。但内部图片仅使用对象 x 引用。

因此,当我们更改副本中的内容时,效果将在原始对象上,因为这里的两个对象都指向同一个引用。

为了解决这种浅拷贝的情况,我们有一些命题和工作,不管对象类型(数组或对象)或需要单独注意。

例如,spread operator 适用于数组和对象中的 deep copy。让我们按照以下部分进行清晰的查看。


在 JavaScript 中使用 Spread Operator 进行深度复制

传播运算符是将一个对象传播到另一个对象的约定。这种复制方法是准确的,任何修改都会使对象保持完整或应该被更改。

同样,展开运算符适用于数组和对象。让我们检查以下实例。

var x = [1, 2, 3];
var y = [...x];
y[2] = 5;
console.log(x[2]);
console.log(y[2]);

输出:

对嵌套对象使用扩展运算符会很乏味,因为你必须访问每个级别的。在这种情况下,更简单的解决方案是使用即将推出的方法。


使用 JSON.parse()JSON.stringify() 进行对象的深层复制

每当我们使用一个对象时,我们都会访问触发 keys 的内容。JSON.parse(JSON.stringify(Object)) 使艰苦的工作变得更好。

它对目标对象进行深拷贝,我们还可以修改内容。

var json = {num: {val: 7}};
var collect = JSON.parse(JSON.stringify(json));
collect.num.val = 42;
console.log(json.num.val);
console.log(collect.num.val);

输出:


在 JavaScript 中使用 Object.assign() 进行对象的深层复制

Object.assign() 方法制作原始对象的准确副本。

以这种方式解决问题,我们需要 2 个参数;一个是一对空白花括号 {},后跟目标对象。让我们检查实例以获得更好的理解。

var x = {'food': 'cheese', 'sport': 'badminton'};
var y = Object.assign({}, x);
y.food = 'chocolate';
console.log(x.food);
console.log(y.food);

输出:


在 JavaScript 中使用 Object.slice(0) 进行数组的深度复制

没有任何参数或零的方法 slice() 启动可以进行深层复制。这是处理数组的熟悉且最常用的方法之一。

除此之外,你还可以使用 map 复制数组。检查此文档以进行进一步查询。

这些示例将更具说明性。

var x = [1, 3, 4];
var y = x.slice(0);
y[2] = 5;
console.log(x);
console.log(y);

输出:


在 JavaScript 中使用 lodash 进行深度克隆

要使用此解决方案,你需要加载 lodash 4.x 库。我们已经检查了 jsbin 编辑器中的示例。

在这里,你将在库部分找到 lodash 4.x

var x = [1, 2, 3];
var y = _.cloneDeep(x);
y[1] = 4;
console.log(y[1]);
console.log(x[1]);

输出:

上一篇:JavaScript 元组示例

下一篇:没有了

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

JavaScript 元组示例

发布时间:2024/03/20 浏览次数:166 分类:JavaScript

在 JavaScript 语言中,元组是具有不可变特性的数组类型。我们可以使用单个变量访问元组,该变量是数组的一种。

JavaScript 右键菜单

发布时间:2024/03/20 浏览次数:123 分类:JavaScript

本文展示了如何在 JavaScript 中向网页添加自定义右键菜单。

使用 JavaScript 编码 HTML

发布时间:2024/03/20 浏览次数:83 分类:JavaScript

本教程将教你如何使用不同的方法对 HTML 字符串进行编码。这些方法的共同点是字符串替换,它替换了具有潜在危险的字符。

在 JavaScript 中 use strict

发布时间:2024/03/20 浏览次数:56 分类:JavaScript

在本文中,学习 JavaScript 中的 use strict 特性。我们将通过不同的示例了解如何在 JavaScript 代码语句中创建和执行 use strict 关键字。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便