ES6语法简介
ES6是继ES5之后发布的JavaScript语言的新一代标准,加入了很多新的特性和语法,该标准于2015年6月17日发布了正式版本,并被正式命名为ES2015.
ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前者的一种实现(另外的 ECMAScript 方言还有 JScript 和 ActionScript)
ES6 既是一个历史名词,也是一个泛指,含义是 5.1 版以后的 JavaScript 的下一代标准,涵盖了 ES2015、ES2016、ES2017 等等,而 ES2015 则是正式名称,特指该年发布的正式版本的语言标准
一、块作用域构造let和const
块作用域存在于:函数内部、块中(即:字符 “ { ” 与 “ } ” 之间的区域)
1.let声明
- 通过var声明的变量存在变量提升机制,而let声明的变量不会被提升,可将变量的作用域限制在当前代码块中
//通过var声明的变量
//函数内部
function changeState(flag) {
if (flag) {
var color = "red"
} else {
console.log(color);
return null;
}
}
changeState(false);
//块中
{
var a = 1;
}
console.log("a=" + a);
//for循环中
for (var i = 0; i < 10; i++) {}
console.log("i=" + i);
//通过let声明的变量
//函数内部
function changeState(flag) {
if (flag) {
let color = "red"
} else {
console.log(color);
return null;
}
}
changeState(false);
//块中
{
let a = 1;
}
console.log("a=" + a);
//for循环中
for (let i = 0; i < 10; i++) {}
console.log("i=" + i);
- 在同一作用域下,不能使用let重复声明已经存在的标识符,但如果在不同的作用域下,则是可以的。
// 在同一作用域下,不能使用let重复声明已经存在的标识符,但如果在不同的作用域下,则是可以的
var a=0;
var b=0;
{
let a=0;
}
let b=0;
- 使用let声明变量,可以防止变量的重复声明
var a=0;
var a=10;//ok
var b=1
let b=100;
2.const声明
- 每个通过const关键字声明的变量必须在声明的同时进行初始化
- 在同一作用域下用const声明已经存在的标识符也会导致语法错误
- 使用const声明对象,对象本身的绑定不能修改,但对象的属性和值是可以修改的
const person={
name:"zhangSan"
};
person.name="lisi"; //ok
person.age=19; //ok
person={
name:"wangwu"
};
3.全局块作用域绑定
- 在全局作用域中使用var声明的变量或对象,将作为浏览器环境中的window对象的属性(使用var很可能会无意中覆盖一个已经存在的全局属性)
var greeting="welcome";
console.log(window.greeting);
console.log(window.Screen);
var Screen="liquid crystal";
console.log(window.Screen);
- 使用let或const声明变量和常量,避免覆盖window对象的属性
let greeting="welcome";
console.log(window.greeting);
console.log(window.Screen);
const Screen="liquid crystal";
console.log(window.Screen==Screen);
总结
- 通过var声明的变量存在变量提升机制,而let声明的变量不会被提升,可将变量的作用域限制在当前代码块中
- 在同一作用域下,不能使用let重复声明已经存在的标识符,但如果在不同的作用域下,则是可以的
- 使用let声明变量,可以防止变量的重复声明
- 每个通过const关键字声明的变量必须在声明的同时进行初始化
- 在同一作用域下用const声明已经存在的标识符也会导致语法错误
- 使用const声明对象,对象本身的绑定不能修改,但对象的属性和值是可以修改的
- 在全局作用域中使用var声明的变量或对象,将作为浏览器环境中的window对象的属性(使用var很可能会无意中覆盖一个已经存在的全局属性)
- 使用let或const声明变量和常量,避免覆盖window对象的属性