ES6总结 第二章:let & const注意事项

  1. for循环中,设置循环变量的那部分是一个副作用域,而循环体内部是一个单独的子作用域。

  2. 暂时性死区:代码块内,使用let声明变量之前,对该变量的操作都会抛出ReferenceError异常。
    let & const的一个重要性是其不出现变量提升。
    如果块区中存在let和const命令,则这个块区对这些命令声明的变量从一开始就形成封闭作用域,只要在声明前使用,就会报错。
    注意:影响typeof安全性。

  3. const大致和let相似,但其实际上保证的是变量指向的那个内存地址不得改动。
    注意:使用freeze可以冻结对象及其属性

const foo = Object.freeze ({ });
  1. ES6中:let, const, class命令声明的全局变量不属于顶层对象window的属性。

  2. 解构赋值:
    原则:只要等号右边的值不是对象或数组,就会先将其转为对象,undefined和null无法转为对象,所以解构赋值会失败。

  • 解构不成功,变量的值就等于undefined。
let foo = [ ]; 
let [bar, foo] = [1];
  • 不完全解构,也是可以成功。
  • 等号右边的值不具备Iterator接口就会报错。只要某种数据结构具有Iterator接口,都可以采用数组形式的解构赋值。
  • 解构赋值允许默认值。ES6内部用“===”判断一个位置是否有值,数组成员不严格等于undefined,默认值不生效(即可以赋值null)。
  1. 对象的解构
  • 对象解构赋值的属性没有次序,但变量必须与属性同名。
  • 内部机制:先找到同名属性,再赋值给对应的变量。真正被赋值的是后者。
  • 解构失败,值为undefined。
  1. 圆括号与解构赋值的关系
  • 解构赋值允许等号左边的模式之中不放置任何变量名。
  1. 解构赋值提取JSON对象数据很有用。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。