首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ES6常用知识点小结

ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准。

因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015(简称ES2015)。虽然浏览器在不断更新,但并不是所有用户的电脑浏览器都支持ES6,所以在使用的过程中建议还是转成es5,保证代码的可执行性。至于转换的方式大家可以用Babel或者Traceur转码器。

1. let 和 const

在ES6以前,Javascript并没有块级作用域的概念,有的是全局作用域和函数作用域,而let的出现就是为了打破局面,let是块级作用域。const是代表常量,必须在定义的时候初始化,不可改变。

1{

2vara=5;

3let b=10;

4}

5console.log(a);

6console.log(b);

控制台就是这样输出:

也就是说,var声明的变量由于不存在块级作用域所以可以在全局环境中调用,而let声明的变量由于存在块级作用域所以不能在全局环境中调用。

再来看一个经典例子(闭包):

1vara=[];

2//执行for循环

3for(vari=0;i

4a[i]=function(){//因为这个是定义,并没有调用方法,不会执行

5console.log(i);

6};

7}

8//for循环之后,此时 i = 10;再次执行a[6]();因为 i 一直被引用,所以不会回收,进入到 a[i] 的方法里面, 打印的是 i ,也就是10

9a[6]();//输出10

如果使用 let

1vara=[];2for(let i=0;i

a[6]函数(闭包)这个执行环境中,它会首先寻找该执行环境中是否存在 i,没有找到,因为 i 是块级作用域,就沿着作用域链继续向上到了其所在的代码块执行环境,找到了i=6,于是输出了6,即a[6]();的结果为6。这时,闭包被调用,所以整个代码块中的变量i和函数a[6]()被销毁。

const 是定义常量:const a = 14; 此后变量 a 的值无法更改覆盖。

2. 字符串拼接

1//传统字符串拼接

2vars1 = '生物膜系统组装又拆分,变幻莫测;';

3vars2 = '你的好多细胞在分裂,';

4varstr = '孩子们:请听我说!'+s2+'有丝,减数,哪管白天和黑夜。'+

5'染色体,细胞核时隐时现,'+s1+'核糖体在mRNA上穿梭忙碌,'+'几千种酶各司其职,将活化能狠狠打折。';

6console.log(str);

7

8//字符模板的写法

9vars1 = '染色体,细胞核时隐时现,';

10vars2 = '你的好多细胞在分裂,';

11varstr =`孩子们:请听我说!$有丝,减数,哪管白天和黑夜。$生物膜系统组装又拆分,变幻莫测;核糖体在mRNA上穿梭忙碌,几千种酶各司其职,将活化能狠狠打折。`;

12console.log(str);

es6使用 ` ` 包裹字符串,即使断开,也可以用这个符号包裹起来合并成一个字符串。

3. 解构赋值

1//以前我们给变量赋值,只能直接指定值

2vara = 1;

3varb = 2;

4varc = 3;

5console.log(a,b,c);//1 2 3

6

7//现在用解构赋值的写法就变得简单了,只要模式匹配上了就行了,如下8//注意数组是有顺序的

9var[a,b,c] = [11,22,33];

10console.log(a,b,c);//

11 22 3311

12var[b,a,c] = [11,22,33];

13console.log(a,b,c);//22 11 33

14

15//当然解构赋值还有嵌套比较复杂的写法,如下

16let [foo,[[bar],[baz]]] = [111,[[222],[333]]];

17console.log(foo,bar,baz);//111 222 333

18

19let [head,...foot] = [1,2,3,4];

20console.log(head,foot);//1 [2,3,4]

21

22//如果解构不成功,变量的值就等于undefined,如下

23var[bar3,foo3] = [1000];

24console.log(bar3,foo3);//1000 undefined

25

26//另一种情况是不完全解构,即等号左边的模式,只匹配一部分的等号右边的数组。这种情况下,解构依然可以成功

27let [x,y] = [10000,20000,30000];

28console.log(x,y);//10000 20000

29

30//默认值可以引用解构赋值的其他变量,但该变量必须已经声明

31let [a=1,b=a] = [2,3];

32console.log(a,b);//2 3

33

34//对象的解构也可以指定默认值

35var= ;

36console.log(x,y);//1 5

37

38//对象的解构赋值解构不仅可以用于数组,还可以用于对象(json)

39//对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;

40//而对象的属性没有次序,变量必须与属性同名,才能取到正确的值

41var= ;

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180310A0YT1T00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券