美文网首页
js中展开运算符的一个注意点

js中展开运算符的一个注意点

作者: 一亩三分地啊 | 来源:发表于2020-11-24 16:57 被阅读0次

众所周知,ES6中增加了对象的展开运算符,开发中我们经常把他用于变量的拷贝或合并来使用。用法是这样:

let a = {age: 18};

let b = {name: "张三", ...a};

console.log(b);  // {name: "张三",age: 18}

当执行上述代码后,a和b是两个完全独立的变量,b的变化不会影响到a。

b.age = 20;

console.log(a.age) // 18

然而当a的属性中包含复杂数据类型时,b的复杂属性变化时会作用到a对应的属性上。

例如:

let a = {age: 18, father: {name: "张大爷"};

let b = {name: "张三", ...a};

b.father.name = "李大爷";

console.log(a.father.name); // 李大爷

结果是b的father变为李大爷以后,a的father也跟着变了,这显然不是我们想要的结果。

由此可见:对象的展开运算符是浅拷贝,对于对象内部的复杂数据类型他拷贝的是对象的引用,新对象的属性变化有可能引起原对象的变化。

数组的展开运算符也有同样的问题,数组中包含对象时,拷贝数组的话也是只拷贝了该对象的引用。

相关文章

  • js中展开运算符的一个注意点

    众所周知,ES6中增加了对象的展开运算符,开发中我们经常把他用于变量的拷贝或合并来使用。用法是这样: let a ...

  • JS-数组-展开元素 解构赋值

    1. 展开运算符 (...)三个点叫做展开运算符,允许一个表达式在某处展开。展开运算符在多个参数(用于函数调用)或...

  • es6 展开运算符

    1.含义:展开运算符(spread operator)——允许一个表达式在某处展开。2.限制:es6中此展开运算符...

  • js展开运算符

    将多个值保存到一个变量中,用在函数和数组中 在函数中使用 let f = (...b) => { b.forEa...

  • 前端笔记10

    条件运算符 运算符优先级 代码块 js操作属性 换肤 js操作style属性 js操作class属性 js中括号操...

  • JavaScript 02 (运算符和选择结构)

    js的关系运算符,js的逻辑运算符,js的赋值运算符,js的运算符的优先级问题,js的自增和自减,js的选择结构 ...

  • js面试题--new的原理

    JS中的new操作符 和其他高级语言一样,JS中也有new运算符,我们知道new运算符是用来实例化一个类,从而在内...

  • JavaScript 01 (JS引入/变量/数据类型/类型转换

    JS的引入及调试,常量,字面量,变量,JS中的数据类型,JS的运算符,JS的运算符之隐式类型转换,强制类型转换,M...

  • js中的 || 与 && 运算符详解

    这篇文章主要介绍了js中的 || 与 && 运算符详解,需要的朋友可以参考下 一 js中逻辑运算符在开发中可以算是...

  • js 中需要 注意的点

    近来,从新扒了一下 js 的所有的大概内容,发现很多东西都是 在我写项目的时候 遇到的坑,但是 教程 早就 已经 ...

网友评论

      本文标题:js中展开运算符的一个注意点

      本文链接:https://www.haomeiwen.com/subject/sntwiktx.html