50ES6零碎知识

ES6简单扩展和单文件组件
来源:http://www.cnblogs.com/winner-one/p/8933525.html
一、ES6的功能
1、let和const
var与let的区别
```javascript:run
var a=[];
for(let i=0;i<10;i++){
a[i]=function(){
console.log(i);
};
}
a[6](); //6
var b=[];
for(var j=0;j<10;j++){
b[j]=function(){
console.log(j);
};
}
b[6](); //10

//转化为ES5以后
var a = [];
var _loop = function _loop(i) {
a[i] = function () {
console.log(i);
};
};
for (var i = 0; i < 10; i++) {
_loop(i);
}
a[6]();
```

2、模板字面量
3、解构赋值
```javascript:run
var person = {name: 'zhangsan', address: {province: '江苏', city: '南京'}};
var {name, address:{province, city}}=person;
console.log(name, province, city);
```
4、展开操作符
5、箭头函数
6、类
二、ES6继承(下面两种写法等效)
```javascript:run
class ColorPoint extends Point {
privateAttr = 2;
}
class ColorPoint extends Point {
constructor(...args) {
super(...args);
this.privateAttr = 2;
}
}
```
三、ES6类和实例的属性和方法
1、在类中定义的方法,是实例的方法,都会被实例继承(类相当于实例的原型)。
2、在类中定义的方法前,加上static,那么该方法就是静态方法,不会被实例继承,可以被子类继承;静态方法是类本身的方法,通过类来调用,里面的this指的是类而不是实例;
3、在类中定义的属性,不需要“var”和“this.”,可以用等式,是实例的属性,以前只能用“this.”写在类的constructor方法里面。
4、在类中定义的属性前,加上static,那么该属性就是静态属性,通过类名.aaa来获取,老写法在类的外部。
来源:http://es6.ruanyifeng.com/#docs/class
来源:https://blog.csdn.net/haoshidai/article/details/52244620
四、ES6常用新特性总结
1、变量申明方式:let && const
2、数据类型:symbol
2、数据操作:解构赋值、拆包赋值、展开操作符
3、函数:箭头函数、默认参数、类、模块化
4、字符串:模板字符串、多行字符串
5、异步处理:Promise(在Promise实例参数内部自定义并执行一个异步,在Promise实例外部通过then注入一个成功的回调和一个失败的回调)
6、数组方法:累加reduce、过滤filter、查找find、遍历map、遍历forEach、
7、对象方法:深拷贝Object.assign()
五、ES7常用新特性总结
1、数组方法:include
2、求幂运算:Math.pow(2,7)<=====>let b = 2 ** 7
六、箭头函数的this。箭头函数不会自动绑定局部变量,所以箭头函数没有它自己的this值,箭头函数内的this值继承自外围作用域。在箭头函数中调用 this 时,仅仅是简单的沿着作用域链向上寻找,找到最近的一个 this 拿来使用。
七、箭头函数和普通函数的区别
1、箭头函数作为匿名函数,是不能作为构造函数的,不能使用new
2、箭头函数不绑定arguments,取而代之用rest参数…解决
3、箭头函数会捕获其所在上下文的 this 值,作为自己的 this 值,即箭头函数所在的对象。
4、使用call()和apply()调用只是传入了参数而已,对 this并没有什么影响
5、箭头函数没有原型属性
6、箭头函数不能当做Generator函数,不能使用yield关键字
7、箭头函数不能换行
来源:https://www.jianshu.com/p/73cbeb6782a0
八、普通函数与箭头函数对照
1、普通函数:var f=function(){return 5}
箭头函数:var f=()=>5
2、普通函数:var f=function(v){return 5}
箭头函数:var f=(v)=>5
3、普通函数:map(function(){return 5})
箭头函数:map(()=>5)
4、普通函数:map(function(v){return 5})
箭头函数:map(v=>5)
附(1)var 变量=(参数)=>函数体
附(2)参数:0或多个参数,需要用();1个参数,不需要()
附(3)函数体:1个分句,不用{},不用return;多个分句,用{},用return;返回值为对象,用({})。

八、暂时性死区:在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”。
九、闭包:函数里面的函数被函数外面的变量引用,导致函数的作用域没法被释放,这种机制就叫闭包。
```javascript:run
function onceDone(){
var num=0;
return function b(){
console.log(++num);
}
}
var manyDone=onceDone();
manyDone();
manyDone();
manyDone();
```
https://www.qdfuns.com/article/40901/535a590a13ea0a6aeabab12701d84869.html
在ES6中,引入了模块化开发,导出和引入模块有许多种方式,现就一一说明:
1、export普通导出(导出时用什么名,引入时就用什么名)
(1)直接导出
export var abc="abc";
export function ABC(){};
(2)先定义,再导出
var abc="abc";
function ABC(){};
export {acb,ABC}
(3)前两者对应的import引入为
import {abc,ABC} from "./abc"
2、export默认导出(导出时没有名,引入时用任意名)
(1)直接默认导出
export default function (){};
export default function ABC(){};
(2)先定义,再默认导出
function ABC(){};
export default ABC;
(3)前两者对应的import引入为
import {DEF} from "./abc"
3、export改名导出(导出时用什么名,引入时就用什么名)
(1) var abc="abc";
function ABC(){};
export {abc as abc1,ABC as ABC1}
(2)前者对应的import引入为
import {abc1,ABC1} from "./abc";或
import {abc1 as abc2,ABC1 as ABC2} from "./abc";另外
import abc,{ABC} from "./def" 指的是,def.js模块默认导出了abc,普通导出了ABC
4、export原名导出,import改名引入
(1)导出方式为:router.js下有module.exports = VueRouter;
(2)引入方式为:import myRouter from './router'或 import VueRouter from './router',可通过console.log(myRouter)来验证。

附一:node模块中export的用法
(1)Node 应用由模块组成,采用 CommonJS 模块规范。
(2)每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。
(3)CommonJS规范规定,每个模块内部,module变量代表当前模块。这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。
加载某个模块,其实是加载该模块的module.exports属性。
(4)为了方便,Node为每个模块提供一个exports变量,指向module.exports。这等同在每个模块头部,有一行这样的命令。
var exports = module.exports;造成的结果是,在对外输出模块接口时,可以向exports对象添加方法。exports.area = function (r) { return Math.PI r r;};
(5)注意,不能直接将exports变量指向一个值,因为这样等于切断了exports与module.exports的联系。
(6)CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。AMD规范则是非同步加载模块,允许指定回调函数。
(7)由于Node.js主要用于服务器编程,模块文件一般都已经存在于本地硬盘,所以加载起来比较快,不用考虑非同步加载的方式,所以CommonJS规范比较适用。
(8)但是,如果是浏览器环境,要从服务器端加载模块,这时就必须采用非同步模式,因此浏览器端一般采用AMD规范。
(9)来源:http://javascript.ruanyifeng.com/nodejs/module.html
附二:模块
(1)commonjs:服务器端同步模块,是对象,运行时加载,输出的是值的拷贝
(2)AMD:浏览器端异步模块,依赖require.js
(3)CMD:浏览器端同步模块,依赖sea.js
(4)ES6模块:不是对象,编译时加载,输出的是值的引用

猜你喜欢

转载自www.cnblogs.com/gushixianqiancheng/p/10966949.html