1、参考
2、… 展开运算符/收集运算符
ES6 … 展开&收集运算符ES6之展开运算符(…)Es6(…)
3、解构赋值
解构赋值需要满足的条件:
1、 左右两边结构必须一样
2.、右边必须是个东西
3.、声明和赋值不能分开(必须在一句话里完成)
es6之解构赋值ES6-解构赋值及其原理-解构看完这篇足够了
4、字符串
(JavaScript - 原生)字符串的20个常用方法 + 字符串遍历器 + 模板字符串javascript的字符串模板
5、原型
帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)JavaScript中的类、原型、原型链、继承
6、array数组
JavaScript数组(Array)方法大全JavaScript 数组详解
JavaScript Array 对象
7、函数参数的默认值
function m1({ x = 1, y = 2 } = {x: 5, y: 6}) {
console.log("m1", x, y);
}
function m2({ x, y } = { x: 3, y: 4 }) {
console.log("m2", x, y);
}
m1();
m2();
console.log("=========================");
m1({ x: 3, y: 8 });
m2({ x: 3, y: 8 });
console.log("=========================");
m1({ x: 3 });
m2({ x: 3 });
console.log("=========================");
m1({});
m2({});
console.log("=========================");
m1({ z: 3 });
m2({ z: 3 });
console.log("=========================");
输出:
helloworld.js:6 m2 3 8
helloworld.js:15 =========================
helloworld.js:2 m1 3 2
helloworld.js:6 m2 3 undefined
helloworld.js:19 =========================
helloworld.js:2 m1 1 2
helloworld.js:6 m2 undefined undefined
helloworld.js:23 =========================
helloworld.js:2 m1 1 2
helloworld.js:6 m2 undefined undefined
helloworld.js:27 =========================
结论:
以函数m1为例进行说明:
function m1({ x = 1, y = 2 } = {x: 5, y: 6}) {…}
- 函数调用的参数为不能解构的值(如m1(undefined),m1([12, 45])),则使用 {x: 5, y: 6}进行赋值
- 函数调用的参数为可以解构的值,则使用{ x = 1, y = 2 }进行赋值。因为不为undefined则认为有值,只是值可能为空,所以使用默认的{ x = 1, y = 2 }进行赋值。
8、promise
promiseJavascript 中的神器——PromisePromise廖雪峰的官方网站ES6 Promise用法小结
Promise MDN
9、generator
runner.js
- js异步编程之Generator
- generator廖雪峰的官方网站
- Generator 函数的含义与用法
- 深入理解js中的yield yield是ES6的新关键字,使生成器函数执行暂停,yield关键字后面的表达式的值返回给生成器的调用者
10、Symbol
11、for in / for of
for in 循环key
for of 循环value
使用for…in和for…of在循环遍历时的区别类似数组的对象
let obj = {
data: [ 'hello', 'world' ],
[Symbol.iterator]() {
const self = this;
let index = 0;
return {
next() {
if (index < self.data.length) {
return {
value: self.data[index++],
done: false
};
} else {
return { value: undefined, done: true };
}
}
};
}
};
// for (const it of obj) {
// console.log(it);
// }
let it = obj[Symbol.iterator]();
console.log(it.next());
console.log(it.next());
console.log(it.next());
console.log(typeof(Symbol.iterator)); //输出 symbol
12、proxy,reflect
- ES6黑科技实践–proxy,reflect
13、JS单线程与异步
- Js既然是单线程的,怎么会有异步这种操作呢
- js的单线程和异步
- JS单线程和异步