1、简介
ECMAScript和JavaScript的区别:
历史原因就不赘述了,总之,ECMAScript是标准,JavaScript是具体实现。
ES6是 下一代js标准,涵盖ES2015、ES2016、ES2017,但是一般泛指ES2015。
一个新的语法从草案到正式标准一般经历5个阶段:stage0 - stage4。
****babel只转换新的语法,像箭头函数这些,而不转换新的API,像Promise、Object.assign、Array.from等(详细请看:
https://github.com/babel/babel/blob/master/packages/babel-plugin-transform-runtime/src/definitions.js
),为了使用这些方法,就要安装babel-polyfill,为当前环境提供一个垫片。****
npm install --save babel-polyfill
//脚本头部引入
import 'babel-polyfill';
2、let + const
**** 不存在变量提升,只能先声明再使用,不能重复声明。
都存在暂时性死区(块级作用域内有效,不会访问到上级作用域内的相同变量) 。
尽量避免在块级作用域中声明函数,若必要,声明函数表达式。
const保证的是指向的变量的内存地址不变,而不是值不变。
for (let i = 0; i < 3; i++) {//设置循环变量的部分为父作用域
//循环体部分为子作用域,所以 i 可以重新定义
let i = 'abc';
console.log(i);
}
// abc
// abc
// abc
function func(a, b){
//重新定义 a b 会报错,属于同一作用域
let a = 1;
let b = 2;
}
ES6中6种声明变量的方式:var function let const import class
全局变量和顶层对象的属性脱钩。(ES5中全局变量即为window的属性)
3、解构赋值
- 有数组和对象、字符串的解构赋值。
- 当等号右边不是对象和数组时,会将其转换成对象,所以null和undefined报错。
- 允许设置默认值。
- 用途:
- 提取json数据
- 函数参数的默认值设置
- 导入指定模块
let {pattern: variable} = {foo:1, bar: 2}//先模式,再变量
//尽量避免在解构赋值时使用圆括号,具体可以参考该章:http://es6.ruanyifeng.com/#docs/destructuring
4、字符串的扩展
字符编码相关就不细说了,没什么实践经验,总是看过就忘,用到的时候再去看了。
记几个函数:
includes startsWith endsWith : 是否包含特定字符、是否已特定字符开头结尾等
repeat padStart padEnds :字符串重复、补齐字符串等
5、正则的扩展
修饰符: y u
.source 正文 .flag 标志