第1章 ECMAScript 6简介
1.ES是JS的规格,JS是ES的实现。
2.es-checker模块可以查看本机对ES6的支持程度。
3.Babel是转码器,配置文件是.babelrc,可以通过babel-cli进行命令行转码。
4.babel-node是随着babel-cli一起安装的,babe-node命令可以直接运行ES6脚本。
5.babel-register只会对require命令加载的文件进行转码,使用babel-core可以调用Babel的API进行转码。
6.babel-polyfill为当前环境提供一个垫片,可以转码JS的新的API。
7.Babel也可以用于浏览器环境。可以使用babel-standalone模块提供的浏览器版本,将其插入网页。
8.ESLint和测试框架Mocha需要Babel进行前置转码。
9.Traceur转码器可以直接插入网页,可以进行在线转换或命令行转换,也可以用于Node环境转换。
第2章 let和const命令
1.for循环设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域。
2.var命令会发生变量提升,即变量可以在声明前使用,值为undefined。为了纠正这种现象,let命令改变了语法行为。它所声明的变量一定要在声明后使用,否则便会报错。
3.如果区块中存在let和const命令,则这个区块对这些命令声明的变量从一开始就形成封闭作用域。只要声明之前就使用这些变量,就会报错。这在语法上成为暂时性死区(TDZ)。
4.let不允许在相同作用域内重复声明同一个变量。
5.ES5只有全局作用域和函数作用域,ES6新增了块级作用域。
6.在ES5中,函数声明会被提升到函数头部。应该避免在块级作用域内声明函数。如果确实需要,应该写成函数表达式的形式。
7.块级作用域可以变为表达式,即可以返回值,办法就是在块级作用域之前加上do,使它变为do表达式。
8.const实际上保证的并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。
9.ES6声明变量的6种方法:var、function、let、const、import和class。
10.在浏览器和Web Worker中,self也指向顶层对象。
第3章 变量的解构赋值
1.如果解构不成功,变量的值就等于undefined。
2.不完全解构,即等号左边的模式只匹配一部分的等号右边的数组。这种情况下,解构依然可以成功。
3.对于Set结构,也可以使用数组的解构赋值。只要某种数据结构具有Iterator接口,都可以采用数组形式的解构赋值。
4.解构赋值允许指定默认值。默认值生效的条件是,对象的属性值严格等于undefined。
5.字符串、数值、布尔值、函数参数也可以解构赋值。
6.不要在模式中放置圆括号,赋值语句的非模式部分可以使用圆括号。
7.变量解构赋值的用途有:交换变量的值、从函数返回多个值、函数参数的定义、提取JSON数据、函数参数的默认值、遍历Map结构、输入模块的指定方法。
第4章 字符串的扩展
1.ES6加强了对Unicode的支持,并且扩展了字符串对象。
2.由于charAt()和charCodeAt()的局限性,ES6新增了codePointAt()方法。
3.使用for...of循环会正确识别32位的UTF-16字符。
4.String.fromCharCode()不能识别大于0xFFFF的码点,String.fromCodePoint()可以识别大于0xFFFF的码点。
5.ES6为字符串添加了遍历器接口,使得字符串可以由for...of循环遍历。
6.at方法可以识别Unicode编号大于0xFFFF的字符,返回正确的字符。
7.ES6为字符串提供了normalize方法,用来将字符的不同表示方法统一为同样的形式,这称为Unicode正规化。
8.ES6新增了includes()、startsWith()、endsWith()、repeat()、padStart()、padEnd()方法。
9.ES6新增了模板字符串,可以嵌套使用。
10.eval()方法可以将字符串变为函数。
11.模板字符串可以紧跟在一个函数的后面,该函数将被调用来处理这个模板字符串。这被称为标签模板的功能。标签模板的一个重要的应用就是过滤HTML字符串,防止用户输入恶意内容,也可用于多语言切换。
12.模板处理函数的第一个参数(模板字符串数组)还有一个raw属性,保存的是转义后的原字符串。
13.ES6还为原生的String对象提供了一个raw方法。
第5章 正则的扩展
1.new RegExp时,第一个参数是字符串或正则表达式,第二个参数是修饰符。
2.字符串具有match、replace、search、split4个方法可以使用正则表达式。
3.ES6对正则表达式增加了u修饰符,含义为Unicode模式,用来正确处理大于\uFFFF的Unicode字符。
4.y修饰符叫做粘连修饰符,s修饰符是dotAll模式。
5.现在js可支持先行断言、先行否定断言、后行断言、后行否定断言。
6.提案引入\p和\P,允许正则表达式匹配符合Unicode某种属性的所有字符。
7.正则表达式使用圆括号进行组匹配,具名组匹配允许为每一个组匹配指定一个名字,既便于阅读代码,又便于引用。
8.如果要在正则表达式内部引用某个“具名组匹配”,可以使用\k<组名>的写法。
第6章 数值的扩展
1.ES6提供了二进制和八进制的新写法,分别用0b和0o表示。
2.ES6在Number对象上提供了Number.isFinite()、Number.isNaN()、Number.parseInt()、Number.parseFloat()、Number.isInteger()方法。
3.Number.EPSILON是一个极小的常量,是一个可以接受的误差范围。
4.Number有最大安全整数和最小安全整数的概念,用Number.isSafeInteger()来判断。
5.Math对象新增的方法有Math.trunc()、Math.sign()、Math.cbrt()、Math.clz32()、Math.imul()、Math.fround()、Math.hypot()。
6.ES6新增了4个对数相关的方法:expm1()、log1p()、log10()、log2(),新增了6个双曲函数方法。
7.Math.signbit()方法判断一个数的符号位是否已经设置。
8.ES6新增了指数运算符**。
9.新的数据类型Integer只用来表示整数,没有位数的限制,任何位数的整数都可以精确表示。Integer类型的数据必须使用后缀n来表示。
第7章 函数的扩展
1.