一, 新增数据类型 Symbol
概念:
Symbol 代表独一无二的
Symbol 类型的值通过 Symbol 函数来生成, 同时 Symbol 函数返回的值的唯一的
Symbol 函数可以接收字符串作为参数, 但是即使相同参数返回的值也是唯一的
作用:
属性私有化
数据保护
- // 没有参数的情况
- var s1=Symbol();
- var s2=Symbol();
- s1===s2; //false
- // 有参数的情况
- var s1=Symbol("foo");
- var s2=Symbol("foo");
- s1===s2; //false
- var mySymbol=Symbol();
- // 第一种写法
- var a={};
- a[mySymbol]="Hello!";
- // 第二种写法
- var a={
- [mySymbol]:"Hello!"
- };
- // 第三种写法
- var a={};
- Object.defineProperty(a,mySymbol,{value:"Hello!"});
- // 枚举 symbol 的 key 值
- Object.getOwnPropertySymbols(obj);
- // 注意: Symbol 作为对象的 key 值不能被 fon in 进行遍历
二, 块级作用域
概念: 在 ES6 中, 凡是 {} 包裹的代码都是块级作用域, 凡是在块级作用域中用 let const 声明的变量都在有一个暂时性死区.
- {
- let a=20;
- }
- console.log(a);// 报错
三, var let const 声明变量
var
支持变量声明与解析
不支持块级作用域
允许重复声明
let
不支持变量声明与解析
支持块级作用域
不允许重复声明
用 let 声明的变量或者方法只会在代码块中生效
- {
- let a=10;
- var b=20;
- }
- console.log(a); // 报错
- const
不支持变量声明与解析
支持块级作用域
不允许重复声明
声明常量, 一旦声明不可修改
声明常量必须赋值, 不能和 var 一样声明后再定义
四, 解构赋值
概念: 允许按照一定的格式, 从对象和数组中提取值
- // 数组解构
- let [a,b,c]=[1,2,3];
- // 对象解构 --- 对象解构时, key 值必须要一一对应
- let {name,age}={name:"孙艺珍",age:20};
- // 对象解构 + 别名
- let {name:_name,age:_age}={naem:"孙艺珍",age:20};
- // 多重解构
- let {obj:{name},arr:[a,b]}={obj:{name:"孙艺珍",arr:[10,20]}};
- // 案例
- let {left:l,top:t}=document.getElementById("box");
五, 扩展运算符
概念: 将数组或对象转换成参数序列, 使用逗号分隔的序列.
作用:
1, 数组, 对象的合并
2, 函数剩余参数
3, 替代 arguments
- // 数组合并
- var arr1=[10,20,30];
- var arr2=[40,50,60];
- var newArr=[...arr1,...arr2];
- // 展开数组
- console.log(Math.max(...arr));
- // 对象合并
- var obj1={width:100,height:100};
- var obj2={left:100,top:100};
- var newObj={...obj1,...obj2};
六, 字符串模板
来源: http://www.bubuko.com/infodetail-3216445.html