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 传导运算符