let 和 const
let
使用
let
定义的变量只在块级作用域里可以访问,而var
定义的变量没有块级作用域的概念,只要在作用域内即可访问
我们可以在循环内使用 let 代替 var
|
|
let 声明的变量不存在变量提升
|
|
暂时性死区(temporal dead zone,简称TDZ)
在使用 let 和 const 定义变量的块级作用域里,会形成封闭的块级作用域,在使用 let 或 const 定义变量的语句之前,该变量无法被赋值,都会抛出 ReferenceError
|
|
其他一些限制
- 使用 let 声明的变量不允许在同一块级作用域内重复声明
- 块级作用域内声明的函数只在该块级作用域内可用
- ES6 块级作用域内的声明的函数不存在函数提升
const
使用
const
声明的变量无法更改,严格模式下重复赋值会报错,而常规模式下不报错也不赋值成功
限制
- const 同样存在暂时性死区
- const 不允许重复定义,不存在变量提升
- 使用 const 声明一个对象,只保证该对象的指针不被修改,不保证该对象内部属性不被修改
- 使用 const 声明的变量只在当前块级作用域内有效
使用 const 声明的变量可以跨模块使用
1234567891011121314// constants.js 模块export const A = 1;export const B = 3;export const C = 4;// test1.js 模块import * as constants from './constants';console.log(constants.A); // 1console.log(constants.B); // 3// test2.js 模块import {A, B} from './constants';console.log(A); // 1console.log(B); // 3在 window 作用域下使用 const 声明的变量不会变为 window.? 变量
解构赋值
ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)
|
|
字符串
Unicode 表示法
|
|
其他函数
- includes(code, startIndex):返回布尔值,表示是否找到了参数字符串
- startsWith(code, startIndex):返回布尔值,表示参数字符串是否在源字符串的头部
- endsWith(code, startIndex):返回布尔值,表示参数字符串是否在源字符串的尾部
- repeat():返回一个新字符串,表示将原字符串重复n次
模板字符串
|
|
数组的扩展
新的数组函数
- Array.from(),用于将类数组对象转换为真正的数组,如果有第二个参数可是实现类似 map() 的效果,使用[…array]会有相同结果
- Array.of(),用于将一组数值转换为数组对象
- (new Array()).copyWithin(target, startIndex, endIndex),用于将 startIndex 到 endIndex 的元素复制到 target 位为开头的位置上
- (new Array()).find(arr, callback),用于寻找 arr 数组中符合 callback 中条件的第一个元素
- (new Array()).findIndex(arr, callback),用于寻找 arr 数组中符合 callback 中条件的第一个元素的索引
- (new Array()).fill(char, starIndex, endIndex),用于用 char 填充数组
- (new Array()).entries(),返回所有键-值(key-value)对
- (new Array()).keys(),返回所有键(key)的值
- (new Array()).values(),返回所有值(value)
以上例子参考自阮一峰老师的《ECMAScript 6入门》一书的开源版本,地址:http://es6.ruanyifeng.com/#README