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...

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

  1. ES6学习笔记--let和const

    今天开始读阮一峰的<ECMAScript 6 入门>,在这里记录下阅读过程中的要点,以便随时查阅. let和const 顶层对象的属性与全局变量挂钩,被认为是js最大的败笔之一,ES6开始 ...

  2. 学习笔记20230508--es6新特性 打散数组和解构赋值 (应用层面)

    在今天学习的过程中,对es6的新特性 打散数组和解构赋值有了全新的认识,现学习分享如下- 欢迎各位大神们指教纠错

  3. ES6学习笔记二arrow functions 箭头函数、template string、destructuring

    接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...

  4. ES6学习笔记03:变量的解构赋值

    ES6学习笔记03:变量的解构赋值 如果想从复杂数据结构(数组.对象)中获取某一个数据,可能需要大量的遍历操作才能完成.通过解构赋值,这一过程可以得到简化. 1.字符串的解构赋值 其实,Python也 ...

  5. ES6学习笔记02:let 与 const

    ES6学习笔记02:let 与 const 用var声明的变量会造成全局污染,于是就产生了新的声明方式. 1.let 用let声明变量,必须先声明后使用. 在for循环头里用let定义循环变量i,那么 ...

  6. es6学习笔记-字符串的扩展_v1.0_byKL

    es6学习笔记-字符串的扩展_v1.0 字符的Unicode表示法 JavaScript 允许使用uxxxx的形式表示一个字符,但在 ES6 之前,单个码点仅支持u0000到uFFFF,超出该范围的必 ...

  7. ES6学习笔记(五):轻松了解ES6的内置扩展对象

    前面分享了四篇有关ES6相关的技术,如想了解更多,可以查看以下连接 <ES6学习笔记(一):轻松搞懂面向对象编程.类和对象> <ES6学习笔记(二):教你玩转类的继承和类的对象> ...

  8. es6学习笔记-顶层对象_v1.0_byKL

    es6学习笔记-顶层对象_v1.0 (虽然是笔记,但是基本是抄了一次ruan大师的文章了) 顶层对象 顶层对象,在浏览器环境指的是window对象,在Node指的是global对象. ES5之中,顶层 ...

  9. # es6 学习笔记

    es6 学习笔记 let变量 let和var用法级别一样 let不能重复声明,但是var可以 var varIns = "A"; var varIns = "B" ...

最新文章

  1. 紧致差分的matlab程序,对流占优扩散方程的一种新C—N 紧致差分格式
  2. VS 调试断点命中了,程序无法再断点处中断
  3. swift 函数.和匿名函数
  4. BZOJ4818 [SDOI2017] 序列计数 【矩阵快速幂】
  5. 数列分块入门(套题)(loj6277,loj6278,loj6279,loj6280,loj6281,loj6282,loj6283,loj6284,loj6285)
  6. 服务引用代理类_在代理类中引用动态代理
  7. leetcode 54. 螺旋矩阵(递归)
  8. 最全的Pycharm debug技巧
  9. 《DSP using MATLAB》Problem 6.16
  10. java公约数_Java:获得最大的公约数
  11. C语言字符型char和整型int的关系和示例
  12. python协程实现一万并发_python中的协程并发
  13. arduino运行java_调试在Arduino MKR1000上运行的Arduino Uno代码
  14. 银行的起源---》阮一峰,
  15. wx2540h配置教程_AC WX2540H 操作配置 本人小白
  16. 通达信版弘历软件指标_弘历主图指标详解 通达信指标
  17. 记账系统推荐金蝶精斗云_小编总结了金蝶精斗云财务软件的优劣势
  18. 潮流短视频必备——PR赛博朋克效果视频转场快速过渡模板
  19. 我和你,不是影子一样的朋友,只在光明的日子里相随
  20. 短信接口被恶意盗刷(验证码短信被盗刷)怎么办?

热门文章

  1. React之setState使用
  2. 多线程:管cheng法
  3. java了解异常_ID检测_Java入门第三季7-1简易扑克牌游戏(自定义玩家个数,玩家个数和ID异常检测)...
  4. 物理搬砖问题_全职业通用,搬砖市场装备
  5. Java可移动性不强_java地位无可撼动的原因
  6. android版本10好不好,一加正式推送Android 10系统 流畅性怎么样
  7. oracle数据分布不均,oracle性能优化操作七:索引提高数据分布不均匀时查询效率...
  8. 转转钓鱼php,最新转转钓鱼源码程序网站微信:mm88wk 最新转转源码 - 下载 - 搜珍网...
  9. c 插件读取有属性的html6,廖雪峰的JS教程6-jQuery
  10. linux ftp用户指定多个目录,linux ftp服务器下用户限制目录的方法