ES6学习

1. let 与 const 

let 声明的变量只在 let 命令所在的代码块内有效。

let 是在代码块内有效,var 是在全局范围内有效. 

let 只能声明一次 var 可以声明多次. 

for 循环计数器很适合用 let.

let 不存在变量提升,var 会变量提升.

const 声明一个只读的常量,一旦声明,常量的值就不能改变。

 

2. 解构赋值

解构赋值是对赋值运算符的扩展。他是一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值。

数组模型的解构(Array):

基本:  let [a, b, c] = [1, 2, 3]     // a = 1, b = 2, c = 3

可忽略:  let [a, , b] = [1, 2, 3]     // a = 1, b = 3

剩余运算符:  let [a, ...b] = [1, 2, 3]    // a = 1, b = [2, 3]

当解构模式有匹配结果,且匹配结果是 undefined 时,会触发默认值作为返回结果:  let [a = 3b = a] = [];  // a = 3, b = 3

对象模型的解构(Object):

基本:  let { foo, bar } = { foo: 'aaa', bar: 'bbb' }   // foo = 'aaa', bar = 'bbb'

剩余运算符:  let {a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40}   // a = 10, b = 20, rest = {c: 30, d: 40}

解构默认值:  let {a = 10, b = 5} = {a: 3}   // a = 3; b = 5

 

 3. Set对象作用

数组去重:

var mySet = new Set([1, 2, 3, 4, 4]);

[...mySet];  // [1, 2, 3, 4] 

Array与Set转换
// Array 转 Set
var mySet = new Set(["value1", "value2", "value3"]);
// 用...操作符,将 Set 转 Array
var myArray = [...mySet];

并集:

var a = new Set([1, 2, 3]);

var b = new Set([4, 3, 2]);

var union = new Set([...a, ...b]);  // {1, 2, 3, 4}

交集:

var a = new Set([1, 2, 3]);

var b = new Set([4, 3, 2]);

var intersect = new Set([...a].filter(x => b.has(x)));  // {2, 3}

差集:

var a = new Set([1, 2, 3]);

var b = new Set([4, 3, 2]);

var difference =new Set([...[...a].filter(x => !b.has(x)),...[...b].filter(x => !a.has(x))]); // {1,4}

 

4.对象

基本用法:

let person = {name: "Amy", age: 15};

let someone = { ...person };

someone;  // {name: "Amy", age: 15}

合并:

let age = {age: 15};

let name = {name: "Amy"};

let person = {...age, ...name};

person;  // {age: 15, name: "Amy"}

注意点:

自定义的属性和拓展运算符对象里面属性的相同的时候:自定义的属性在拓展运算符后面,则拓展运算符对象内部同名的属性将被覆盖掉。

let person = {name: "Amy", age: 15};

let someone = { ...person, name: "Mike", age: 17};

someone;  // {name: "Mike", age: 17}

对象的新方法:

Object.assign(target, source_1, ···)     用于将源对象的所有可枚举属性复制到目标对象中

基本用法:

let target = {a: 1};

let object2 = {b: 2};

let object3 = {c: 3};

Object.assign(target,object2,object3);  // 第一个参数是目标对象,后面的参数是源对象 target; // {a: 1, b: 2, c: 3}

注意点:

assign 的属性拷贝是浅拷贝:

let sourceObj = { a: { b: 1}};

let targetObj = {c: 3};

Object.assign(targetObj, sourceObj);

targetObj.a.b = 2;

sourceObj.a.b;  // 2

浅拷贝:
对内存地址的复制,让目标对象指针和源对象指向同一片内存空间。注意:当内存销毁的时候,只想对象的指针,必须重新定义,才能够使用.

深拷贝:
深拷贝是指,拷贝对象的具体内容,二内存地址是自主分配的,拷贝结束之后俩个对象虽然存的值是一样的,但是内存地址不一样,俩个对象页互相不影响,互不干涉.

 

 5. 数组

比较常用到:

const arr3 = [...arr1, ...arr2] // 合并两个数组
const arr = Array.from(new Set(arr3)) // 去重

find()
查找数组中符合条件的元素,若有多个符合条件的元素,则返回第一个元素。
let arr = Array.of(1, 2, 3, 4);
console.log(arr.find(item => item > 2)); // 3

合并数组:
console.log([...[1, 2],...[3, 4]]); // [1, 2, 3, 4]

 
posted @ 2021-12-03 11:30  dahei  阅读(31)  评论(0)    收藏  举报