一、什么是ES6
ES全称是ECMAScript(ECMA全称称欧洲计算机制造商协会),其实ECMAScript是一种标准。想必大家对JavaScript肯定不陌生,其实javascript就是ECMAScript的一种实现,是遵循其规范而设计的一种语言。
ES版本是以年份命名的,比如ES2015,ES2016等等,其中ES6就是ES2015,在历年更新中,尤其以ES6版本更新内容最大,之后逐年虽在更新,但是更新幅度较小。所以人们常以ES6代表ES2015之后的所有更新。ES版本每年6月份发布一次,目前最新已经来到了ES2021(ES11)。
二、变量的声明方式
2.1 var
- 这是ES5声明变量的方式
- 下面是我们最常用的使用方式
- 不知道大家有没有见过这种,这种该如何解读呢?
这种方式代表在全局对象window下定义一个属性b,赋值为6。我们可以采用delete方法来验证。首先要明确,delete只能用于删除对象的属性。
- 还有一种情况
是不是非常疑惑,为什么window.a也能被正常打印出来。其实,这正式JS这门语言设计的最大败笔之一。他把顶层对象的属性和全局变量进行了挂钩。这样做其实是很不友好的。比如说,当我们项目足够复杂时,就会有很多全局变量,这样就造成了全局变量污染。但是,为了解决这一问题,ES6中新加入了let.
2.2 let
- let定义的变量不属于顶层对象window
- 不允许重复声明
- 不存在变量提升
let就会避免这种情况
- 暂时性死区
- 具有块级作用域
- 经典面试题
2.3 const
const和let的区别就是,let定义变量,而const是用来遍历常量
- ES5如何定义常量
- ES6定义常量
- 不属于顶层对象window
- 块级作用域
- 不具有变量提升
- 暂时性死区
- 不允许重复声明
同时还要注意,const声明引用数据类型时,是可以被改变的
我们可以是用Object.freeze来冻结住对象,但是只能冻结浅层次,不能深层次冻结