定义
- ES6, 全称 ECMAScript 6.0 ,是 JavaScript 的下一个版本标准,2015.06 发版。
- ES6 主要是为了解决 ES5 的先天不足,比如 JavaScript 里并没有类的概念
Let
-
定义:
用于声明变量。 -
Let和var的区别:
1.let 声明的变量只在 let 命令所在的代码块内有效。(代码块指花括号,花括号引起来的就是代码块)var 是在全局范围内有效。
2.let 只能声明一次 var 可以声明多次。
3.let 不存在变量提升,var 会变量提升。
const
-
定义:
用于声明变量。
const 声明一个只读变量
,声明之后不允许改变。意味着,一旦声明必须初始化,否则会报错。 -
基本用法:
const PI = "3.1415926"; -
暂时性死区:
var PI = "a"; if(true){ console.log(PI); // ReferenceError: PI is not defined const PI = "3.1415926"; }
-
注意:
ES6 明确规定,代码块内如果存在 let 或者 const,代码块会对这些命令声明的变量从块的开始就形成一个封闭作用域。代码块内,在声明变量 PI 之前使用它会报错。
const 如何做到变量在声明初始化之后不允许改变的?其实 const 其实保证的不是变量的值不变,而是保证变量指向的内存地址所保存的数据不允许改动。此时,你可能已经想到,简单类型和复合类型保存值的方式是不同的。是的,对于简单类型(数值 number、字符串 string 、布尔值 boolean),值就保存在变量指向的那个内存地址,因此 const 声明的简单类型变量等同于常量。而复杂类型(对象 object,数组 array,函数 function),变量指向的内存地址其实是保存了一个指向实际数据的指针,所以 const 只能保证指针是固定的,至于指针指向的数据结构变不变就无法控制了,所以使用 const 声明复杂类型对象时要慎重。
解构赋值
-
定义:
解构赋值是对赋值运算符的扩展。
他是一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值。
在代码书写上简洁且易读,语义更加清晰明了;也方便了复杂对象中数据字段获取。 -
解构模型:
在解构中,有下面两部分参与:
解构的源,解构赋值表达式的右边部分。
解构的目标,解构赋值表达式的左边部分。 -
数组模型的解构(Array):
let [a, b, c] = [1, 2, 3]; // a = 1 // b = 2 // c = 3
解构默认值:
let [a = 2] = [undefined]; // a = 2
当解构模式有匹配结果,且匹配结果是 undefined 时,会触发默认值(2)作为返回结果。
-
对象模型的解构(Object):
let { foo, bar } = { foo: 'aaa', bar: 'bbb' }; // foo = 'aaa' // bar = 'bbb'
解构默认值
let {a = 10, b = 5} = {a: 3}; // a = 3; b = 5; let {a: aa = 10, b: bb = 5} = {a: 3}; // aa = 3; bb = 5;
剩余运算符
let [a, ...b] = [1, 2, 3]; //a = 1 //b = [2, 3]
Symbol
-
定义:
ES6 引入了一种新的原始数据类型 Symbol ,表示独一无二的值,最大的用法是用来定义对象的唯一属性名。
ES6 数据类型除了 Number 、 String 、 Boolean 、 Objec t、 null 和 undefined ,还新增了 Symbol 。 -
基本用法:
Symbol 函数栈不能用 new 命令,因为 Symbol 是原始数据类型,不是对象。
例:let sy = Symbol("KK"); console.log(sy); // Symbol(KK) typeof(sy); // "symbol" // 相同参数 Symbol() 返回的值不相等 let sy1 = Symbol("kk"); sy === sy1; // false //由于每一个 Symbol 的值都是不相等的,所以 Symbol 作为对象的属性名,可以保证属性不重名。 let sy = Symbol("key1"); // 写法1 let syObject = {}; syObject[sy] = "kk"; console.log(syObject); // {Symbol(key1): "kk"} // 写法2 let syObject = { [sy]: "kk" }; console.log(syObject); // {Symbol(key1): "kk"} //Symbol 作为对象属性名时不能用.运算符,要用 方括号。因为.运算符后面是字符串,所以取到的 是字符串 sy 属性,而不是 Symbol 值 sy 属性。
Map对象
-
定义:
Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。
数据格式(存储数据的方式)有数组,对象,Map也用来存储数据。 -
Maps 和 Objects 的区别:
一个 Object 的键只能是字符串或者 Symbols,但一个 Map 的键可以是任意值。
Map 中的键值是有序的(FIFO 原则即先入先出原则),而添加到对象中的键则不是。
Map 的键值对个数可以从 size 属性获取,而 Object 的键值对个数只能手动计算。
Object 都有自己的原型,原型链上的键名有可能和你自己在对象上的设置的键名产生冲突。 -
基本用法:
var myMap = new Map(); (实例化一个Map对象)
var key = "a string";
myMap.set(key, "大家好"); (保存数据)
myMap.get(key); // "和键'a string'关联的值"
myMap.get("大家好"); (获取数据)
网友评论