本文主要讲解 ES6 中 简单 常用 的一些简单语法,不做过深介绍,深入介绍可异步阮一峰大神的 ECMAScript 6 入门
let 和 const
es6新增了两个声明变量的命令分别为 let
和 const
let
let声明变量,在声明的时候才定义
特点:只在当前代码块中有效(注意是“代码块”,而不是“作用域”)
用处
为何要用 let
:当我们希望一个变量只在当前代码块有效,而不影响当前作用域的时候使用,例如以下两种情况
1 | for(let i = 0;i<100;i++){ |
1 | for(let key in obj){ |
用法解析
1 | for (let i = 0; i < 10; i++) { |
i 是在 for
循环里面声明使用的,故无法在外面使用
1 | for (let i = 0; i < 3; i++) { |
上面代码正确运行,输出了3次 abc
,这表明循环内部(花括号内部)的变量 i
与循环变量 i
不在同一个作用域,有各自单独的作用域。
暂时性死区
1 | var a = 123; |
上面的代码中,按原有逻辑分析,a
开始为 123
,在 if
里面使用的时候,会到上一级去寻找 a
的定义和赋值的地方 ,于是能赋值成功才对。
但该赋值会报错,是因为 let
导致的
ES6 明确规定,如果区块中存在 let
或 const
声明变量,那么在一开始就在当前代码块形成了一个块级封闭作用域,凡是在声明之前就使用这些变量,都会报错
于是就产生了一个很有意思的问题
1 | typeof a12345 |
会发现 a12345
是报错,而一个没有声明的变量 a123456
却是 undefined
const
其实在一般使用的时候 const 和 let 区别不大
const特点
const 旨在定一个固定不变的变量
注意:这个“固定不变”指的是内存地址
举例:
1 | const num = 10; |
字符串模板
这个的用处真的是太大了
我曾见过这样的代码:
不知道你们看到这样的代码的时候,内心是不是很激动啊😂
在 ES6 里面,如果有些地方不得不用字符串拼接的时候,可以这么使用
1 | var a,b,c,d,e = 10; |
在ES6中可以用 ` ` 来包裹字符串,
- 在其中可以肆无忌惮的使用单引号和双引号。
- 变量或者表达式 用
${}
包裹起来
箭头函数
ES6 里面提供了函数的简写,也就是箭头函数
1 | var ad = ()=>{ |
用处
1 | var sum = 0; |
如果需要 return
,可以直接省略后面的花括号
1 | var arr = [1,2,3].map( item => item * 2 ) |
例子
这里有个有意思的小例子
注意的是,箭头函数里面 this
的作用域,是在定义的时候生效的,而不是在运行的时候生效,具体看阮一峰大神的注意点
1 | var obj2 = { |
上面代码里面 obj2
里面的 this
发现指向的是 window
对象
数组和对象
数组和对象里面,用到的比较多的就是迭代吧
以前我们复制一个数组或者对象的方法是以下这样
1 | var arr1 = [1,2,3].concat([]) |
方法很多就不一一列举了
在ES6中就方便多了
1 | var arr = [1,2,3] |
不过要注意的是,这些复制的都是浅拷贝
数组常用方法
以下四个方法,平时用的比较多的方法
map
.map 不改变原数组,生成一个新的数组
1 | var arr = [1,2,3,4] |
reduce
.reduce 不改变原数组,第一个参数为计算后的值,也是最后返回的值,后面才是 item
, index
1 | var arr = [1,2,3,4] |
filter
.map 不改变原数组,生成一个新的数组
1 | var arr = [1,2,3,4] |
他跟 .map
方法很像,一般要对数据进行处理就用 .map
方法,而仅仅是过滤数据就用 .filter
includes
.includes
判断数组是否存在某值
1 | var arr = ['a','s','d','f'] |
includes
第二个参数,查询的起始位置