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