ES6学习day01:let和const的特点及其区别

let 和 const是ES2015(ES6) 新增加的两个重要的 JavaScript 关键字。

1.let命令特点:

1.ES6新增let命令。

用来声明变量,用法类似var,但是它所声明的变量只在let命令所在的代码块内有效。使用方法如下:
ES6学习day01:let和const的特点及其区别_第1张图片
2.不存在变量提升。

let不像var那样,会发生"变量提升"现象。
通过如下程序分析:

ES6学习day01:let和const的特点及其区别_第2张图片

上面ES5和ES6两种写法只有c是var声明的,d是let声明的。输出结果为:

ES6学习day01:let和const的特点及其区别_第3张图片

问题:
a[5]();输出为9,b[5]();输出为5。为什么呢?为什么a[5]();输出不是理想中的5呢?

答案:
因为上述ES5写法循环结束的时候i的值已经为10,c=9,调用a[5]();时i是循环结束时的值,c=9,因此输出是9。

而d变量是由let声明,只在循环体内部起作用,在外部不起作用,影响不了外部的d,所以在调用第5个d时,值为5。

可以通过debug断点调试程序,帮助理解,循环结束d变为未定义,如下图

ES6学习day01:let和const的特点及其区别_第4张图片

3.暂时性死区。

只要块级作用域内存在let命令,它所声明的变量就“绑定(binding)”这个区域,不再受外部的影响。

例如:

ES6学习day01:let和const的特点及其区别_第5张图片

块级作用域内存在let命令,它所声明的变量就不受外界影响,如下情况,a输出仍然为100。

ES6学习day01:let和const的特点及其区别_第6张图片

4.不允许重复声明。

let命令不允许在相同的作用域内,重复声明同一个变量。

ES6学习day01:let和const的特点及其区别_第7张图片

【注意】在 ES6 之前,JavaScript 只有两种作用域: 全局变量 与 函数内的局部变量

2.const命令

const和let一样具有只在块级作用域有效、不存在变量提升、暂时性死区、不可重复声明这四个特点。使用方法也和let命令相同。

  • const定义常量和let定义的变量相同点:

    1.二者都是块级作用域。

    2.都不能和它所在作用域内的其他变量或函数拥有相同的名称。

  • 两者不同点:

    1.const声明的常量必须初始化,而let声明的变量不用。

    2.const 定义常量的值不能通过再赋值修改,也不能再次声明。而 let 定义的变量值可以修改。

在这里插入图片描述

  • 特性:

const 声明一个只读的常量,一旦声明,常量的值就不能改变。

在这里插入图片描述

  • const声明对象

const可以声明一个对象和数组。

实例如下:
ES6学习day01:let和const的特点及其区别_第8张图片

  • 对象的冻结

1.冻结方法

可以使用Object使const对象冻结。

ES6学习day01:let和const的特点及其区别_第9张图片

2.使用对象冻结

在内部封装好对象,输出时就会有内容输出。

ES6学习day01:let和const的特点及其区别_第10张图片

  • const并非真正的常量

const 的本质:

const 定义的变量并非常量,并非不可变,它定义了一个常量,引用一个值。使用 const 定义的对象或者数组,其实是可变的。

1.对象操作

如下修改对象属性值和增加属性并不会报错:
ES6学习day01:let和const的特点及其区别_第11张图片

输出结果为:
ES6学习day01:let和const的特点及其区别_第12张图片

但是不能对常量对象重新赋值。!!! 如下:
在这里插入图片描述

2.数组操作

如下修改数组元素和增加元素并不会报错:
ES6学习day01:let和const的特点及其区别_第13张图片

输出结果为:

ES6学习day01:let和const的特点及其区别_第14张图片

但是不能对常量数组重新赋值。!!! 如下情况会报错。
在这里插入图片描述

每天进步一点点、快乐充实一点点、开心一点点!加油!The Girl!

你可能感兴趣的:(ES6)