对象的扩展运算符
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