1.let const
1.只在let命令所在的代码块内有效
2.ES6 明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错
3.ES6 的块级作用域必须有大括号,如果没有大括号,JavaScript 引擎就认为不存在块级作用域
4.const命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用
ES5 只有两种声明变量的方法:var命令和function命令。ES6 除了添加let和const命令,后面章节还会提到,另外两种声明变量的方法:import命令和class命令。所以,ES6 一共有 6 种声明变量的方法。
为了保持兼容性,var命令和function命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。也就是说,从 ES6 开始,全局变量将逐步与顶层对象的属性脱钩。
2.字符串
1.ES6 为字符串添加了遍历器接口,使得字符串可以被for...of循环遍历。
for( let codePoint of 'foo') {console.log(codePoint) }
2.模板字符串(template string)是增强版的字符串,用反引号(`)标识。它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量
$('#result').append(`
There are<b>${basket.count}</b>itemsinyour basket,<em>${basket.onSale}</em>are on sale!
`);
3.includes():返回布尔值,表示是否找到了参数字符串
4.startsWith():返回布尔值,表示参数字符串是否在原字符串的头部 endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部
6.repeat(3):方法返回一个新字符串,表示将原字符串重复n次
7.padStart(5,'ab'):用于头部补全,padEnd(5,'ab'):用于尾部补全
8.对字符串实例新增了trimStart()和trimEnd()这两个方法。它们的行为与trim()一致,trimStart()消除字符串头部的空格,trimEnd()消除尾部的空格。它们返回的都是新字符串,不会修改原始字符串
3.数值
1.ES6 提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示。如果要将0b和0o前缀的字符串数值转为十进制,要使用Number方法。
Number('0b111') // 7
Number('0o10') // 8
2.Number.isFinite()用来检查一个数值是否为有限的(finite),即不是Infinity
3.Number.isNaN()用来检查一个值是否为NaN
4.ES6 将全局方法parseInt()和parseFloat(),移植到Number对象上面,行为完全保持不变
// ES5的写法
parseInt('12.34') // 12 parseFloat('123.45#') // 123.45
// ES6的写法
Number.parseInt('12.34') // 12 Number.parseFloat('123.45#') // 123.45
5.Number.isInteger()用来判断一个数值是否为整数
6.Math.trunc()方法用于去除一个数的小数部分,返回整数部分
7.Math.sign()方法用来判断一个数到底是正数、负数、还是零。对于非数值,会先将其转换为数值。参数为正数,返回+1;参数为负数,返回-1;参数为 0,返回0;参数为-0,返回-0;其他值,返回NaN。