一、新增数据类型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};
六、字符串模板
原文:https://www.cnblogs.com/wuqilang/p/11601419.html