ES6 新特性
1. 新特性
1.1 let 与 const
let 声明的变量只在 let 命令所在的代码块内有效。不能重复声明。不存在变量提升。
// 输出 0- 9: for (let j = 0; j < 10; j++) { setTimeout(function(){ console.log(j); }) }
const 声明一个只读的常量,一旦声明,常量的值就不能改变。一但声明必须初始化,否则会报错。
var 和 let :
let 是块作用域,即其在整个大括号 {} 之内可见
在变量声明之前就访问变量的话,会直接提示 ReferenceError,而不像 var 那样使用默认值 undefined
const 和 let
作用域是一致的,不同的是 const 变量一旦被赋值,就不能再改变了
但是这并不意味着使用 const 声明的变量本身不可变,只是说它不可被再次赋值了
什么时候用 var、let 或 const 呢?
大多数情况下都使用 const
如果变量的值的确需要改变,例如在 for 循环里面,那么就是用 let
(与时俱进,es6,就不要用 var 了吧。。)
1.2 解构赋值
一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值
数组模型的解构 : 基本 可嵌套 可忽略 不完全解构 剩余运算符 字符串等 解构默认值
let [a, b, c] = [1, 2, 3]; // a = 1 // b = 2 // c = 3
对象模型的解构 : 基本 可嵌套可忽略 不完全解构 剩余运算符 解构默认值
let { foo, bar } = { foo: 'aaa', bar: 'bbb' }; // foo = 'aaa' // bar = 'bbb'
1.3 Symbol
ES6 数据类型除了 Number 、 String 、 Boolean 、 Objec t、 null 和 undefined ,还新增了 Symbol 。表示独一无二的值.
使用场景 : 作为属性名 定义常量
let sy = Symbol("KK"); console.log(sy); // Symbol(KK) typeof(sy); // "symbol"
let yellow1 = Symbol.for("Yellow"); Symbol.keyFor(yellow1); // "Yellow"
1.4 Map 与 Set
1.4.1 Map 对象
Maps 和 Objects 的区别
一个 Object 的键只能是字符串或者 Symbols,但一个 Map 的键可以是任意值。
Map 中的键值是有序的(FIFO 原则),而添加到对象中的键则不是。
Map 的键值对个数可以从 size 属性获取,而 Object 的键值对个数只能手动计算。
Object 都有自己的原型,原型链上的键名有可能和你自己在对象上的设置的键名产生冲突。
var myMap = new Map(); var keyString = "a string"; myMap.set(keyString, "和键'a string'关联的值"); myMap.get(keyString); // "和键'a string'关联的值" myMap.get("a string"); // "和键'a string'关联的值"
Map 的迭代 : for...of forEach()
Map 对象的操作: Map 与 Array的转换 Map 的克隆 Map 的合并
1.4.2 Set 对象
存储任何类型的唯一值,无论是原始值或者是对象引用。
let mySet = new Set(); mySet.add(1); // Set(1) {1} mySet.add(5); // Set(2) {1, 5} mySet.add(5); // Set(2) {1, 5} 这里体现了值的唯一性
类型转换 : Array 转 Set Set 转 Array String 转 Set
Set 对象作用: 数组去重 并集 交集 差集
此处省略N个点,后续文章再细节描述
2. 参考链接