ES6介绍
ECMA国际标准化组,他们希望这种语言成为国际化标准兼容大部分主流浏览器,所以ECMAscript就是js的一种写作规格。ES6在2015年提出的语法,在以前大部分浏览器没有完全识别ES6语法可以在node.js等框架内进行使用,但是现在ES6语法已经被大部分浏览器所支持,可以在页面上直接运行。用ES6完全替代ECMAscript标准不太现实,所以在2016年对ECMAscript的标准进行了升级简称ES6语法。
参考资料:阮一峰老师《ES6》电子书
let和const命令
let是es6新增的命令,用来声明变量,类似于var,但是声明的变量只在let命令所在的代码块内有效。
例如:
if(true){
var a=22;
let b=44}//a输出22 b报错;(let让代码块标称私有)
不存在变量提升
var声明的变量会存在变量提升,在变量声明之前调用,值会自动找undefine类型,所以值找不到也没在页面上输出,这种现象不好,在let里纠正了此行为,找不到变量会进行报错。
例如: console.log(a)
var a=11;//输出undefined
let a=11;//输出错误
暂时性死区
只要在块级作用域内存在let命令,他所声明的变量就进行了锁定,不在受外部环境的影响。
例如:var a=11
if(true){
a=22;
let a;}
document.writeln(a);//报错,因为在if里let重新声明了a变量,就把作用在代码里进行绑定。
let不允许重复声明
let不允许和var在同一个作用域下声明同一个变量
例如: function fun(){
let a=10;
var a=1;
};//报错
ES6的块级作用域
在函数里嵌套时,为了防止变量定义重复,可以let声明块级作用域
例如:
function fun() {let n=1;
if(true){
let n=5}
console.log(n)
fun();//输出1
const命令
const用来声明常量,一旦声明,常量的值就不能改变
错误演示*
1.常量定义时必须赋值
const n;//报错
2.常量的值就不能改变
const PI=3.1415;
PI=3.3;//报错
3.常量声明不会变量提升,也会出现暂时性死区
if(true){
const MAX=5};MAX//输出报错
本质和原理
const实际上保证的并不是变量的值不可改动,而是变量指向的内个内存地址不可改动。对于基本数据类型,值就保存在变量指向的内存地址中,所以值不可改变,所以等同于常量。但是对于复合类型(引用类型)而言,变量指向的内存地址保存的只是一个指针,const只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,完全不能控制。
例如:
> const emp={ } emp.name="lisi" emp.name=" zhangsan”
> document.writeln(emp.name) ;//我们可以改对象下的属性和方法 emp= [ ]
> document.writeln(emp)//但是却不能把对象变成其他类型值
*****声明变量的方式
var ,function,let,const,class,import