开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第4天,点击查看活动详情
前言
通过这篇文章记录学习到ES6的内容
let const
let 和 var
- 作用域:let是块作用域,var是函数作用域;
- 变量提升:变量在声明前使用,值为undefined let不存在变量提升,必须先声明后使用;
- 重复声明,var可以重复声明,let可以
for 循环 设置循环变量的那部分是一个父级作用域,循环体内部是一个子作用域
- 暂时性死区:
ES6 明确规定,如果区块中存在
let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。
// 暂时性死区出现的情况: 先使用声明一个变量,而后在一个块作用域中用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新增的
letconstclass声明的全局变量不属于顶层对象的属性 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()
- 模板字符串
${}