es6扩展运算符 三个点(…)

本文详细介绍了JavaScript中的对象扩展运算符(...),包括用于对象的拷贝、数组赋值的限制以及转换字符为数组。同时,探讨了基本数据类型与引用数据类型的拷贝区别,并通过实例展示了其在数据变更时的影响。
摘要由CSDN通过智能技术生成

对象的扩展运算符

1.1 对象中的扩展运算符(…)用于取出参数对象中的所有可遍历属性

对象中的扩展运算符(…)用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中

    const a = {a:1,b:2,c:3};
    const b ={...bar}
    console.log(a,b);

输出结果:

{1,2,3}
{1,2,3}

上面的方法等价于:
const a = { a: 1, b: 2 };
const b = Object.assign({}, a); // { a: 1, b: 2 }

Object.assign方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)

1.2 如果将扩展运算符用于数组的赋值只能放在参数的最后一位,否则会报错

const […rest, last] = [1, 2, 3, 4, 5];
// 报错
const [first, …rest, last] = [1, 2, 3, 4, 5];

1.3 扩展运算符还可以将字符转为数组

[…‘hello’]
// [ “h”, “e”, “l”, “l”, “o” ]

2. 如果用户自定义的属性,放在扩展运算符后面,则扩展运算符内部的同名属性会被覆盖掉。

 const a= {a: 1, b: 2};
 const b= {...a, ...{a:2, b: 4}}; // {a: 2, b: 4}
 a.a = 10
    console.log(a,b);

输出结果:

{a: 10, b: 2} {a: 2, b: 4, c: 3}

原对象的数据改变不会影响拷贝的数据。

let a= { a: 1, b: 2, c: {nickName: 'd'}};
let b = { ...obj1};
a.c.nickName = 'd-edited';
console.log(a); 
console.log(a); 

{a: 1, b: 2, c: {nickName: ‘d-edited’}}
{a: 1, b: 2, c: {nickName: ‘d-edited’}}

原对象的数据改变会影响拷贝的数据。

3. 引入基本数据类型与引用数据类型:

3.1 基本数据类型

基本数据类型有哪些,number,string,boolean,null,undefined,symbol以及未来ES10新增的BigInt(任意精度整数)七类。

引用数据类型

引用数据类型(Object类)有常规名值对的无序对象{a:1},数组[1,2,3],以及函数等。

原理就是:
基本类型–名值存储在栈内存中
引用数据类型–名存在栈内存中,值存在于堆内存中,但是栈内存会提供一个引用的地址指向堆内存中的值

基础类型拷贝的时候,会在栈内存新开辟一个内存

引用数据类型 也会在会在栈内存新开辟一个内存 存放是数据的名,复制的时候只是复制了引用地址

官方文档
原文链接:https://blog.csdn.net/astonishqft/java/article/details/82899965

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值