目录
ES6
ECMAScript简介
ECMA电脑操作格式标准
ECMA-262
ES6以ECMAScript2015为标准
ES6新特性
let与const变量以及块级作用域
解决var带来的变量声明提升的问题。
let变量无变量提升
ES5 只支持全局、局部(函数里面)作用域
ES6新增了块作用域,代码块{ },仅let、const支持。是动态类型。
在同一作用域下,let,const不允许重复申明
{
let y = 1000;
console.log(y);//y=100;
}
console.log(y);//y is not defined
模板字符串
即插值字符串,通过模板拼接字符串。
//模板字符串
//使用字符串拼接实现数据描述
let name = "xiaoming";
let age = 20;
{
let info = name + " is " + age + " year old.";
console.log(info);
}
//模板字符串
{
let info = `${name} is ${age} year old.`;//插值运算符
console.log(info);
}
解构赋值
使用解构从数组和对象中提取并赋值给独特的变量。
//解构赋值
//分为数组、对象解构
let student
{
name:"小明",
age=20
};
let stu_name=student.name;
let stu_age=stuande.age;
let{s_name:name,s_age:age}=student;//对象解构赋值
let numbers=[22,33,44,55];
//let a=numbers[0]
let[a,b,c,d]=numbers;//数组解构赋值
console.log(a,b,c,d);
箭头函数
即使用Lambda表达式表示函数来代替匿名函数。
//箭头函数
//可以理解为一个语法简便的匿名函数
function f1(n) {
return 10 * n;
}
//函数表达式
let f2 = function (n) {
return 10 * n;
}
//箭头函数
let f3 = (n) => 10 * n;
let f3 = (n) => {
return 10*n;
}
箭头函数没有上下文执行对象this。
函数的默认参数
在声明函数时为参数赋予初值。
面向对象的支持
通过class关键创建类,通过extends继承,通过super访问父类。
//class类
class Student {
constructor(name, age) {
this.name = name;
this.age = age;
}
show() {
console.log(`${this.name} is ${this.age} year old.`);
}
}
let s1=new Student("小明",20)
s1.show();
对象字面量简写法
使用和所分配的变量名称相同的名称初始化对象时,如果属性名称和所分配的变量名称一样,则可以从对象属性中删除这些重复的变量名称。
//对象字面量简写
//let x=20;
//let y=40;
let [x,y]=[20,40];//不是数组
//let point={x:x,y:y};
let point={x,y}
Symbol类型
提供一种表示独一无二的值的方式,从而解决可以解决类似对象属性名称冲突的问题。
新数据结构——Set与Map
- Set提供一种类似与数组,但是每个成员都是唯一的。
- Map提供一种类似于对象的键值对集合,但键的类型不限于字符串,可以是各种类型的值。
Proxy(代理)
用于修改某些操作的默认行为,等同于在语言层面作出修改,属于一种“元编程(meta programming)”,即对编程语言进行编程。代理允许拦截在目标对象上的底层操作。
Reflect(反射)
给底层操作提供默认行为的方法集合,这些操作是能够被代理重写的。反射和代理方法是一一对应的。
Promise
异步编程的一种解决方案,预定两个方案:正确怎么做,失败怎么做。
Iterator(遍历器)与for..of循环
- Iterator是一种接口,为各种不同的数据结构提供统一的访问机制。
- for...of循环作为便利所有具有Iterator接口的数据结构的统一方法。
模块化
- 一个模块就是一个独立的文件,文件内部的所有变量,外部无法获取。
- 通过export规定模块对外的接口,通过import输入其他模块提供的功能。
兼容性
ES6是一次重大的版本升级
ES5、ES3编写的代码依然能够正常运行
ECMAScript是一门充满活力的语言,并在不断进化。