1.let 和 const

1.1 let

1.1.1 let声明的变量,只在let命令所在的代码块有效
1.1.2 let不存在变量提升
1.1.3 只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。
ES6 明确规定,如果区块中存在letconst命令,这个区块对这些命令声明的变量,从一开始就形成了封闭 作用域。凡是在声明之前就使用这些变量,就会报错
1.1.4 let不允许在相同作用域内,重复声明同一个变量。
1.1.5 let实际上为 JavaScript 新增了块级作用域。
1.1.6 ES5 规定,函数只能在顶层作用域和函数作用域之中声明,不能在块级作用域声明。
1.1.7 ES6 引入了块级作用域,明确允许在块级作用域之中声明函数。ES6 规定,块级作用域之中,函数声明语句的行为类似于let,在块级作用域之外不可引用。
1.1.8 浏览器的 ES6 环境中,块级作用域内声明的函数,行为类似于var声明的变量。
1.1.9 考虑到环境导致的行为差异太大,应该避免在块级作用域内声明函数。如果确实需要,也应该写成函数表达式,而不是函数声明语句。

1.2 const

1.2.1const声明一个只读的常量。一旦声明,常量的值就不能改变。

2.变量的解构赋值

2.1 数组

  1. let [a, b, c] = [1, 2, 3];

只要某种数据结构具有 Iterator 接口,都可以采用数组形式的解构赋值。
解构赋值允许指定默认值

2.2 对象

  1. let { foo, bar } = { foo: 'aaa', bar: 'bbb' };

与数组一样,解构也可以用于嵌套结构的对象。2.3字符串

  1. let obj = {
  2. p: [
  3. 'Hello',
  4. { y: 'World' }
  5. ]
  6. };
  7. let { p: [x, { y }] } = obj;
  8. x // "Hello"
  9. y // "World"

对象的解构赋值可以取到继承的属性。

2.4数值和布尔值

2.5函数参数

  1. function add([x, y]){
  2. return x + y;
  3. }
  4. add([1, 2]); // 3

2.6圆括号问题

3.字符串的扩展

3.1字符的Unicode表示法

‘\uoo61’ —> ‘a’
这种表示法只限于码点在\u0000~\uFFFF之间的字符。超出这个范围的字符,必须用两个双字节的形式表示。

  1. "\uD842\uDFB7"
  2. // "𠮷"
  3. "\u20BB7"
  4. // " 7"

ES6 对这一点做出了改进,只要将码点放入大括号,就能正确解读该字符。

  1. "\u{20BB7}"
  2. // "𠮷"
  3. "\u{41}\u{42}\u{43}"
  4. // "ABC"
  5. let hello = 123;
  6. hell\u{6F} // 123
  7. '\u{1F680}' === '\uD83D\uDE80'
  8. // true

3.2 字符串的遍历器接口

使得字符串可以被for...of循环遍历。

  1. for (let codePoint of 'foo') {
  2. console.log(codePoint)
  3. }
  4. // "f"
  5. // "o"
  6. // "o"

4.字符串的新增方法

4.1 String.fromCodePoint())

可以识别大于0xFFFF的字符,弥补了String.fromCharCode()方法的不足。在作用上,正好与下面的codePointAt()方法相反。

  1. String.fromCodePoint(0x20BB7)
  2. // "𠮷"
  3. String.fromCodePoint(0x78, 0x1f680, 0x79) === 'x\uD83D\uDE80y'
  4. // true

4.2String.raw())

该方法返回一个斜杠都被转义(即斜杠前面再加一个斜杠)的字符串,往往用于模板字符串的处理方法。

  1. String.raw`Hi\n${2+3}!`
  2. // 实际返回 "Hi\\n5!",显示的是转义后的结果 "Hi\n5!"
  3. String.raw`Hi\u000A!`;
  4. // 实际返回 "Hi\\u000A!",显示的是转义后的结果 "Hi\u000A!"

4.3实例方法:codePointAt())

ES6 提供了codePointAt()方法,能够正确处理 4 个字节储存的字符,返回一个字符的码点。

4.4实例方法:normalize())

ES6 提供字符串实例的normalize()方法,用来将字符的不同表示方法统一为同样的形式,这称为 Unicode 正规化。

4.5实例方法:includes(), startsWith(), endsWith(),%20startsWith(),%20endsWith())