ECMAScript6入门

2. let 和 const 命令

let 命令

1.基本用法(let的作用域只能在代码块内,var是全局 )

1
{   
2
    let a = 6;      
3
    var b = 10;   
4
}

2.不存在变量提升

1
var 的情况         
2
console.log(foo); // 输出undefined   
3
var foo = 2;
4
5
// let 的情况   
6
console.log(bar); // 报错ReferenceError  
7
let bar = 2;

3.暂时性死区

(只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。)

4.不允许重复声明

let不允许在相同作用域内,重复声明同一个变量。

5.ES6 的块级作用域

let实际上为 JavaScript 新增了块级作用域。
块级作用域的出现,实际上使得获得广泛应用的立即执行函数表达式(IIFE)不再必要了。

6.块级作用域与函数声明

ES6 的块级作用域允许声明函数的规则,只在使用大括号的情况下成立,如果没有使用大括号,就会报错。

const 命令

一旦声明,常量的值就不能改变,不可重复申明。

ES6 声明变量的六种方法(var,function,let, const,import,class);

global 对象

1
// 方法一
2
(typeof window !== 'undefined'
3
   ? window
4
   : (typeof process === 'object' &&
5
      typeof require === 'function' &&
6
      typeof global === 'object')
7
     ? global
8
     : this);      
9
// 方法二
10
var getGlobal = function () {
11
  if (typeof self !== 'undefined') { return self; }
12
  if (typeof window !== 'undefined') { return window; }
13
  if (typeof global !== 'undefined') { return global; }
14
  throw new Error('unable to locate global object');
15
};

3. 变量的解构赋值

数组的解构赋值

基本用法

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

默认值

1
let [foo = true] = [];   foo // true   
2
let [x, y = 'b'] = ['a']; // x='a', y='b'   
3
let [x, y = 'b'] = ['a', undefined]; // x='a',    y='b'

对象的解构赋值

1
let { foo, bar } = { foo: "aaa", bar: "bbb" };
2
foo // "aaa"
3
bar // "bbb"

字符串的解构赋值

数值和布尔值的解构赋值

函数参数的解构赋值

圆括号问题

用途

4.字符串的扩展

ES6 加强了对 Unicode 的支持,并且扩展了字符串对象。

字符的 Unicode 表示法

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

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

字符的 Unicode 表示法

codePointAt()

String.fromCodePoint()

字符串的遍历器接口

5.正则的扩展(不太理解)

RegExp 构造函数

字符串的正则方法

u修饰符

y修饰符

sticky 属性

flags 属性

s修饰符:dotAll 模式

后行断言

Unicode 属性类

具名组匹配

6. 数值的扩展

二进制和八进制表示法

Number.isFinite(), Number.isNaN()

Number.parseInt(), Number.parseFloat()

Number.isInteger()

Number.EPSILON

安全整数和Number.isSafeInteger()

Math对象的扩展

Math.signbit()

指数运算符

Integer 数据类型

7.函数的扩展

函数参数的默认值

1
有默认值的参数要放在最后
2
function f(x, y, z=5) {
3
  return [x, y, z];
4
}
5
f(2,3);	//[2,3,5]   
6
7
function fetch(url, { method = 'GET', name = "hello"} = {}) {
8
  console.log(method);
9
  console.log(name);
10
}
11
fetch('http://example.com');
12
//"GET"   
13
//"hello"

rest 参数

1
function add(...values) {
2
  let sum = 0;
3
4
  for (var val of values) {
5
    sum += val;
6
  }
7
  return sum;
8
}
9
10
add(2, 5, 3) // 10

严格模式

name 属性

箭头函数

绑定 this

尾调用优化

函数参数的尾逗号

catch 语句的参数

8.数组的扩展

扩展运算符

Array.from()

Array.of()

数组实例的 copyWithin()

数组实例的 find() 和 findIndex()

数组实例的fill()

数组实例的 entries(),keys() 和 values()

数组实例的 includes()

数组的空位

9. 对象的扩展

属性的简洁表示法

属性名表达式

方法的 name 属性

Object.is()

Object.assign()

属性的可枚举性和遍历

Object.getOwnPropertyDescriptors()

proto属性,Object.setPrototypeOf(),Object.getPrototypeOf()

Object.keys(),Object.values(),Object.entries()

对象的扩展运算符

Null 传导运算符