最近写项目经常用到ES6语法,特地整理一下之前学习的ES6新特性。
1.let块级声明
ES6中新增let指令,它的用法和var一样,用来声明变量,但是let只能在代码块中有效。
![d765faeb186ff75569fe7cf342dcc698.png](https://i-blog.csdnimg.cn/blog_migrate/a24ef81a160d82628f2d64b7f53e2730.jpeg)
![7abaf3d73552c97249cfdca7d28bbc4d.png](https://i-blog.csdnimg.cn/blog_migrate/e42db32ac15c0d1b4b0fb3928f4e3da7.png)
正常情况下,let和var没有太大的区别,a=3,b=4
![3beebf1644a17a2f52c3141e26035560.png](https://i-blog.csdnimg.cn/blog_migrate/5a391473bb3d2cfd5a348946f4f69b13.jpeg)
![27c2897f14e4892e1ecb3cc1463ecc75.png](https://i-blog.csdnimg.cn/blog_migrate/49d3d65bb41a3ccbfd0581872bdbdd42.jpeg)
在花括号的用let声明的c报错。
可以看出: let
命令在定义的{}
内生效,某些语言也有类似特点,我们将其称为"块级作用域".
这样,let
定义的变量,只在块内生效,不影响其他区域,所以我们说Ta更 "清洁".
2.const常量
const
声明一个只读的常量。一旦声明,常量的值就不能改变。
![c704887e3cb7405a807cae2c9561cf40.png](https://i-blog.csdnimg.cn/blog_migrate/9d717e2f49dae7c775cc251fd2118703.jpeg)
3.解构赋值
3.1.数组的解构赋值
只要等号两边的模式相同,左边的变量就会被赋予对应的值
![cb70a845dd5a0b336b183a7b57c8e485.png](https://i-blog.csdnimg.cn/blog_migrate/2c48a6d6804534d53e58dcdd59881b1b.jpeg)
![ca179740be1886cdcf5c2866c6f5ff21.png](https://i-blog.csdnimg.cn/blog_migrate/dd32dc76646b9ffaad23f31dcc7ce96e.png)
![5c9dbe02a817b8dbcd23100613567db8.png](https://i-blog.csdnimg.cn/blog_migrate/1e81030797b41ce8cfb89294ed7fe309.jpeg)
![ef740e3237b3628edbeef79e0d19de4e.png](https://i-blog.csdnimg.cn/blog_migrate/c555363795ea1a9797741b47eea26f23.jpeg)
![fe59cb6f0a8b8cc5754bb350f34e79e1.png](https://i-blog.csdnimg.cn/blog_migrate/f643d01bcab4408fcec88fea3d68f798.jpeg)
![1d50f9d3f64ffde1f39b37778b18afe0.png](https://i-blog.csdnimg.cn/blog_migrate/660b0643a71242c97150cb38a988623e.jpeg)
3.2对象的解构赋值
对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。
![e78e34adccaa7a20d4749c2a925c45ab.png](https://i-blog.csdnimg.cn/blog_migrate/094e020ba689435769bea01035325b07.jpeg)
![e59dc6664fbc8180d6d0e790535735ba.png](https://i-blog.csdnimg.cn/blog_migrate/6fa2394d791be13b4d522e59278a6c32.jpeg)
![80dbbdd18665d1b4a5b8558e49793140.png](https://i-blog.csdnimg.cn/blog_migrate/e84db3d6b60c83adcbb023ce53f33456.jpeg)
![87ea470dbe8c58c90b6d942e4a5e8219.png](https://i-blog.csdnimg.cn/blog_migrate/ab5cecc0a3bcbc2b44b5a943a93ed83e.jpeg)
name变量没有对应的同名属性,导致取不到值
4.属性的简洁表示法
ES6 允许直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁
![b3457e574a9955a35020bab2a1a795a1.png](https://i-blog.csdnimg.cn/blog_migrate/7f8dae27f522d4772c6fd165843147dc.jpeg)
5.箭头函数
箭头函数表达式的语法比 函数表达式 更短,并且没有自己的 this,arguments。这些函数表达式更适用于那些本来需要匿名函数的地方,并且它们不能用作构造函数。
![093def5f9ea745bf7f9386adde10d60b.png](https://i-blog.csdnimg.cn/blog_migrate/d2b8fc8cc398d7bd880acd35612a40b5.jpeg)
如果参数只有一个,可以将()省略 // arr.map(c=>c+1);如果没有参数,则一定能要写上() // ()=> console.log(‘a’)如果多于一个参数,每个参数之间用逗号分隔 (x, y) => { ... }如果方法体只有一句代码,可以省略{} 和分号,如果有返回可以省略return如果方法体多于一句代码,则不能省略{} ,每句代码使用 分号分隔
注意:
a. 箭头函数没有自己的this,函数体内部写的this,指向的是外层代码块的thisb. 箭头函数内部的this是定义时所在的对象,而不是使用时所在的对象并且不会改变c. 箭头箭头函数不能用作构造函数d. 箭头函数内部不存在arguments,箭头函数体中使用的arguments其实指向的是外层函数的arguments