资讯专栏INFORMATION COLUMN

ES6 学习笔记(一)let,const和解构赋值

iOS122 / 1561人阅读

摘要:另外对于已经声明的变量进行解构赋值时,要非常小心。因此在行首加,将其强制转化为表达式执行。由于和无法转为对象,所以对它们进行解构赋值,都会报错。

let和const

let和const是es6新增的两个变量声明关键字,与var的不同点在于:

(1)let和const都是块级作用域,在{}内有效,这点在for循环中非常有用,只在循环体内有效。var为函数作用域。

(2)使用let和const声明的变量,不存在变量提升,必须先声明再使用。使用var声明的变量可以先使用再定义。

(3)不可重复声明。一旦用var,let或者const声明过的变量,再次用let或者const声明时会报错,函数的参数名如果用let或者const在函数体内声明同名的参数时,也会报错。

const特殊要点:

(1)const顾名思义常量,但这个常量与高级语言的常量有所不同,这里的常量指的是在定义就确定其值,并且这个值只读,不可以修改;高级语言的常量更狭隘一点;

(2)使用const声明的变量,一旦声明需要立即初始化,只声明的变量无法用const,const a; 编译会报错;并且一旦初始化,就不能改变。

(3)const用于定义一个复合型对象或者数组时,只是对对象或者数组本身不可赋值,但依然可以为对象添加属性或者为数组push元素。

解构赋值

解构是按照一定的模式,从数组和对象中提取值,对变量进行赋值,解构表达式的左侧是一般[]或者{}。当解构表达式的左侧是[]时,右侧也必须是对应的具有可遍历属性的对象,因此可以是[],map或者string;当解构表达式的左侧为{}时,javascript解析器会先将右侧的值转换为对象,然后从转换的对象获取对应的属性值。总之,解构一个很重要的原则就是“模式匹配”,根据左侧是[]或者{},对右侧进行转换,如果转换后,两侧模式匹配,则进行解构赋值,否则报错。

同时,解构时允许设置默认值,但这里的执行顺序是:先解构,如果解构得到的值为非undefined,则变量值=解构的值,默认赋值表达式不执行;只有当解构得到的值严格等于undefined时,才会执行默认赋值表达式,否则默认赋值表达式是不执行的。

1.数组解构

数组的解构是按照变量的顺序进行赋值的,因此变量的值与数组的顺序息息相关,不同的顺序,解构得到的值也不同。

2.对象解构

对象解构与数组解构不同,对象解构与元素的顺序无关,对象解构的主要依据是对象的属性,对象的属性没有次序,变量必须与属性同名,才能取到正确的值。

3.函数参数解构

函数参数解构其实是数组解构或者对象解构的一种应用,在es6中可以为函数参数指定默认值,这点和解构一起使用,对于参数赋值非常实用。函数参数的解构同样要求模式匹配,函数定义时的参数的数据类型和调用时传入的参数类型保持一致。

另外:对于已经声明的变量进行解构赋值时,要非常小心。下面的示例中,首先用let对变量进行了声明,由于let和const声明的变量不能重复声明,在通过解构表达式赋值时,javascript解析器会将行首的{}解析为代码块,报语法错误。因此在行首加(),将其强制转化为表达式执行。

4.字符串的解构赋值

字符串也可以进行解构赋值,因为字符串可以转化为一个具有类似数组的对象。

5.数字和布尔值的解构赋值

解构赋值时,如果等号右边是数值和布尔值,则会先转为对象。解构赋值的规则是,只要等号右边的值不是对象,就先将其转为对象。由于undefined和null无法转为对象,所以对它们进行解构赋值,都会报错。

参考文献:http://es6.ruanyifeng.com/#do...

     http://es6.ruanyifeng.com/#do...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/102119.html

相关文章

  • es6 学习笔记

    摘要:块级作用域只有全局作用域和函数作用域,没有块级作用域,这带来了很多不合理的场景。如声明变量的方法只有两种声明变量的方法命令一共有六种命令变量的解构赋值允许按照一定的模式,从数组和对象中提取,按照位置的对应关系对变量赋值,这被称为解构。 块级作用域 es5只有全局作用域和函数作用域,没有块级作用域,这带来了很多不合理的场景。 第一种场景:内层变量可能会覆盖外层变量 var test = ...

    李昌杰 评论0 收藏0
  • ES6学习笔记

    摘要:学习笔记在学习的过程中做的一些记录,用于未来的快速回忆。数组成员为时,默认值仍会生效因为在内部使用严格相等运算符,判断一个位置是否有值,所以当一个数组成员严格等于默认值才会生效。 ES6学习笔记 在学习ES6的过程中做的一些记录,用于未来的快速回忆。 let&const 作用域的概念 ES6新增块级作用域的概念(一个大括号括起来的部分就是一个块作用域) let与const用于在块级作...

    mengbo 评论0 收藏0
  • 珠峰培训ES6学习笔记1

    摘要:消除字符串头部空格消除尾部空格从头部补全字符串从尾部补全字符串 let和const var关键字定义变量的特点: 可以重复定义 不能定义常量 不支持块级作用域 let的特点 不可以重复定义 变量不能提升,在变量定义之前,不能使用 在大括号当中定义的变量(块级作用域中),在作用域外无法访问 解决一些ES5当中需要闭包实现的功能,比如:每隔1秒循环输出一个当前的值 const的特点...

    番茄西红柿 评论0 收藏0
  • ES6学习笔记1--letconst命令、解构赋值Symbol

    摘要:和命令命令在声明所在的块级作用域内有效。解构赋值从数组和对象中提取值,对变量进行赋值,这被称为解构。数值和布尔值的解构解构赋值时,如果等号右边是数值和布尔值,则会先转为对象。默认值解构赋值允许指定默认值。 let和const命令 let命令 在声明所在的块级作用域内有效。 只要块级作用域内存在let命令,它所声明的变量就绑定(binding)这个区域,不再受外部的影响。 在同一个作用...

    liaosilzu2007 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<