ES6 基本知识,不用完全掌握,但要会用
1、let && const
初始化
- const 声明常量必须初始化,初始化之后不允许改变
作用域
- var:声明的变量可以越狱
- let:声明的变量有严格局部作用域
1 2 3 4 5 6
| { var a = 1; let b = 2; } console.log(a); console.log(b);
|
声明次数
1 2 3 4 5 6
| var m = 1; var m = 2; let n = 3; let n = 4; console.log(m); console.log(n);
|
变量提升
1 2 3 4
| console.log(x); var x = 10; console.log(y); let y = 20;
|
2、解构
数组解构
1 2 3 4 5 6 7 8 9 10
| let arr = [1, 2, 3];
let a = arr[0]; let b = arr[1]; let c = arr[2];
let [a, b, c] = arr; console.log(a, b, c);
|
对象解构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| const person = { name: "jack", age: 21, language: ["java", "js", "css"], };
const name = person.name; const age = person.age; const language = person.language;
const { name, age, language } = person;
const { name: abc, age, language } = person;
|
3、字符串
扩展
1 2 3 4 5
| let str = "hello.vue"; console.log(str.startsWith("hello")); console.log(str.endsWith(".vue")); console.log(str.includes("e")); console.log(str.includes("hello"));
|
模板
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| let ss = `<div> <span>hello world<span> </div>`; console.log(ss);
function fun() { return "这是一个函数" }
# 使用 let info = `我是${abc},今年${age + 10}了, 我想说: ${fun()}`; console.log(info);
|
4、箭头函数
函数参数默认值
1 2 3 4 5
| function add2(a, b = 1) { return a + b; } console.log(add2(20));
|
不定参数
1 2 3 4 5
| function fun(...values) { console.log(values.length) } fun(1, 2) fun(1, 2, 3, 4)
|
箭头函数
1 2 3
| print = function (obj) { console.log(obj); };
|
1 2
| print = (obj) => console.log(obj);
|
此处另外单独整理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| sum = (a, b) => { return a + b; };
sum = (a, b) => a + b;
const person = { name: "jack", age: 14, language: ["java", "python", "c++"], };
hello = ({ name, language: [a, b] }) => console.log("hello, " + name + ", lang: " + a + "," + b);
hello(person);
|
5、对象优化
新增 API
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| const person = { name: "jack", age: 21, language: ['java', 'js', 'css'] } //快速获取 console.log(Object.keys(person));//["name", "age", "language"] console.log(Object.values(person));//["jack", 21, Array(3)] console.log(Object.entries(person));//[Array(2), Array(2), Array(2)]
const target = { a: 1 }; const source1 = { b: 2 }; const source2 = { c: 3 }; //合并后面的对象到第一个对象 Object.assign(target, source1, source2); console.log(target);
|
声明对象简写
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| const age = 23 const name = "张三"
const person1 = { age: age, name: name }
const person2 = { age, name } console.log(person2);
let person3 = { name: "jack", eat: function (food) { console.log(this.name + "在吃" + food); }, eat2: food => console.log(person3.name + "在吃" + food), eat3(food) { console.log(this.name + "在吃" + food); } }
|
扩展运算符
1 2 3 4
| let p1 = { name: "Amy", age: 15 }; let someone = { ...p1 }; console.log(someone);
|
1 2 3 4 5 6
| let age1 = { age: 15 } let name1 = { name: "Amy" } let p2 = {name:"zhangsan"} p2 = { ...age1, ...name1 } console.log(p2)
|
map && reduce
map
接收一个函数,将原数组中的所有元素用这个函数处理后放入新数组返回。
1 2 3 4 5 6
| let arr = ['1', '20', '-5', '3']; arr = arr.map((item)=>{ return item*2 }); arr = arr.map(item=> item*2); console.log(arr);
|
reduce
方法对数组中的每个元素执行一个由我们提供的reducer函数(升序执行),将其结果汇总为单个返回值
1
| arr.reduce(callback, [initialValue]);
|
1 2 3 4 5 6
| 1. previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue)) 2. currentValue (数组中当前被处理的元素) 3. index (当前元素在数组中的索引) 4. array (调用 reduce 的数组)
initialValue (作为第一次调用 callback 的第一个参数。)
|
1 2 3 4 5 6
| let arr = [1, 2, 3, 4]; let sum = arr.reduce(function (prev, cur, index, arr) { console.log(prev, cur, index); return prev + cur; }); console.log(arr, sum);
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| let arr5 = ["name", "age", "long", "short", "long", "name", "name"];
let arrResult1 = arr.reduce((pre, cur) => { console.log(pre, cur); if (cur in pre) { pre[cur]++; } else { pre[cur] = 1; } return pre; }, {});
console.log(arrResult1);
|
1 2 3 4 5 6 7 8
| let arrResult2 = arr5.reduce((pre, cur) => { if (!pre.includes(cur)) { pre.push(cur); } return pre; }, []);
console.log(arrResult2);
|
1 2 3 4 5 6 7 8 9 10 11 12
| let arr6 = [ [0, 1], [2, 3], [4, [5, 6, 7]], ]; const newArr = function (arr) { return arr.reduce( (pre, cur) => pre.concat(Array.isArray(cur) ? newArr(cur) : cur), [] ); }; console.log(newArr(arr));
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| var result = [ { name: "王二", age: 10, }, { name: "张三", age: 20, }, { name: " 李四", age: 30, }, ];
var sum = result.reduce(function (prev, cur) { return cur.age + prev; }, 0); console.log(sum);
|
6、Promise
异步编程的一种解决方案,其实是一个构造函数,自己身上有 all、reject、resolve 这几个方法,原型上有 then、catch 等方法。
详细见博客
7、模块化
1 2 3 4
| export default { let a = 0 sum = (a,b) => a+b; }
|