ES6 语法笔记(一)

67 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第4天,点击查看活动详情

前言

通过这篇文章记录学习到ES6的内容

学习参考 阮一峰入门教程

let const

let 和 var

  • 作用域:let是块作用域,var是函数作用域;
  • 变量提升:变量在声明前使用,值为undefined let不存在变量提升,必须先声明后使用;
  • 重复声明,var可以重复声明,let可以

for 循环 设置循环变量的那部分是一个父级作用域,循环体内部是一个子作用域

  • 暂时性死区:

ES6 明确规定,如果区块中存在letconst命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。

// 暂时性死区出现的情况: 先使用声明一个变量,而后在一个块作用域中用let/const再次声明
var temp =123;
if(true){
temp='abc'; // 报错 ReferenceError
let temp; 
}
  • 重复声明:let 不允许重复声明一个变量

  • 用块作用域代替匿名立即执行函数

(function(){state}())
{
state
}
  • 不允许在块作用域中声明函数,函数只能在顶层作用域和函数作用域中声明

cosnt

  • const声明的不能改变值,在声明是必须初始化
  • cosnt声明的对象(引用数据类型),其属性是可以改变的,因为const 变量存储的是一个地址,只能保证这个地址不发生改变,而它指向的数据结构是不可控的,如果真的想把对象冻结,使用Object.freeze() 方法

顶层对象

  • 浏览器中顶层对象: window ;Node 顶层对象global
  • 在es5中 全局变量==顶层对象的属性
  • es6中 var和function声明的全局对象仍然是顶层对象的属性,而es6新增的let const class 声明的全局变量不属于顶层对象的属性
  • globalThis 在各种环境下取到顶层对象

解构赋值

数组: let [a,b,c] = [1,2,3] 按照顺序赋值 对象: let {c:a,d:b} = {a:1,b:2} = let c = obj.a 获得同名属性

不完全解构: 没有完全获取数组或对象的值

let [a] = [1,3]
let {a} ={a:1,b:2}

事实上,只要某种数据结构具有 Iterator 接口,都可以采用数组形式的解构赋值。

默认值

let[x=1,y=2]=[3] // x->3 y->2

let {x=1}={};//->x=1

只有当所取值严格等于undefined 该变量才会使用默认值

扩展

字符串扩展

  • Unicode 可以表示超出 \u0000~\uFFFF范围的字符 \u{XXXXX}
  • 遍历器接口 for...of
  • JSON.stringify()
  • 模板字符串 ${}