ECMA6新增语法(待续...)
块级作用域: es6允许你使用块级作用域,不过目前大多数的es6语法只允许在严格模式下使用("use strict” )。
1 let关键字
作用:声明变量,一个花括号就是一个作用域(每个花括号内就是全新变量).
特点:不在进行声明提升,在块作用域外无法访问变量,和const一样只能声明一次.
关键字:let , const,function,class es6下都可以以块为作用域 借鉴:
//var 声明的变量作用在定时器外的函数里的 for(var i=0; i<5; i++){ settimeout(function(){ alert(i); },1000); } //因为let以花括号作为作用域,for每次循环的时候都会重新let一个变量 理解let在for循环中:https://zhuanlan.zhihu.com/p/51966830 //let变量作用在括号,且外部无法访问 for(let i=0; i<5; i++){ settimeout(function(){ alert(i); },1000); }
2 const声明常量
作用:定义一个常量
特点:不会声明提升,以块为作用域,值无法更改,只能声明一次.
//将对象设置为常量,它的值是可以修改的 //因为我们常量的值,只是在栈内存中保存的指向对象的指针 数据类型的栈和堆内存:https://www.cnblogs.com/liveoutfun/p/8962019.html const obj = {a:1,b:2,c:3} obj.a = 100; console.log(obj.a); //10
3 箭头函数
作用:通过简洁的格式声明一个函数
特点:比传统函数格式简洁(省略了function,return,单个形参时括号),且this指向是上级函数的指向
//普通函数声明格式 var a = function(){ return 1+1; } //箭头函数声明格式 var a = x =>{ 1 + 1; } //多个参数 var a = (x,y,z) =>{ 1 + 1; }
4 destructuring解构
作用:可以通过解构方式来取值
//一般定义变量写法 var x=10,y=20,z=30; //解构赋值允许你给多个变量赋值 let [x,y,z] = [10,20,30]; let [x,[a,b],y] = [10,[15,18],20]; 这并不是在定义数组,而是通过等号两边的结构匹配,进行赋值。 //解构赋值允许你少取一个值: let [x,y] = [10,20,30]; //结果x=10,y=20 let [x,[a,b],y] = [10,[5],20]; //结果x=10,a=5,y=20,b=undefined 浏览器并不会报错,依然赋值成功。 //可以使用对象不按照顺序取值
var {id,name,age} = {name:'yt',age:30,id=30}
//用途 //可以方便的交换两个变量的值 [a,b] = [b,a];
//可以一次为多个变量取值 [a,b] = () =>{ return [1,2] }
//对象格式可以不考虑取值顺序 {a,b,c} = {b:1,a:2,c:3}
//从数组或对象的某一项 var {a:newname} = obj; //对象 var [0:newname] = arr; //数组
总结:数组格式的可以批量取值,对象格式的可以打乱顺序取值
5 字符串的一些方法
作用:ecma6字符串可以更快捷的拼接字符串
//快捷的字符串拼接 var str = `我是ecma${变量、表达式}字符串` //字符串中的换行不会报错 var str = ` 不会报错!! `
6 数组的一些方法
array.from(伪数组) //可以将伪数组转换为数组
array.copywithin(被替换元素下标,截取开始下标,截取结束下标); //复制元素替换元素(一条龙服务)
array.find(function(value,index,arr){ return value > 10 }) //和过滤类似,只找一次符合条件的元素.
findindex(function(value, index, arr){}) //和find类似,不过返回的是符合一次要求的元素的下标
7 object.assign
8 第七种数据类型symbol
9 set和map集合
10 map集合,即映射