ES6
ECMAScipt是ECMA International定义的商标脚本语言规范。创建它是为了标准化JavaScipt。ES脚本语言具有许多实现,流行的实现是JavaScipt。通常,ECM用于万维网的客户端脚本。
ES6是JavaScipt语言的主要增强,允许我们编写程序,ES6适用于复杂的应用程序,在目前的互联网ES6的使用率远远比ES5高所以我们要进行ES6的学习接下来就让我们看看都有那些改动把。
1.const和let
ES6推荐使用let声明局部变量,相比之前的var,无论是在何处进行生声明,都会被视为声明在函数的最顶部。
let表示声明变量,而const表示声明常量,两者都为块级作用域;当const声明的是一个对象时,这个对象包含的值是可以被修改的,但对象所指向的地址值不能被改变。
2.模板字符出
在ES6之前我们往往通过“ \ ”和“ + ”来构建模板,但在ES6诞生之后我们还是用${}来界定只是用反引号(``)来包住内容即可。
3.箭头函数(Arrow Functions)
ES6中,箭头函数就是函数的一种简写方式,使用括号包裹参数,跟着一个 => ,紧接着是函数体;
有三个比较直观的特点:
1.省略return关键字
2.不需要用function关键字来创建函数
3.继承当前上下文的this关键字
// es5
var p = function (a,b) {
return a+b;
}
// 箭头函数
var p = (a,b) => a + b;
4.for...of 和 for...in
for...of用于遍历一个迭代器,如数组:
let zimus = ['a', 'b', 'c'];
zimus.size = 3;
for (let zimu of zimus) {
console.log(zimu);
}
// 结果: a, b, c
for...in用于遍历对象中的属性:
let stus = ["猫猫", "17", "女"];
for (let stu in stus) {
console.log(stus[stu]);
}
// 结果: 猫猫, 17, 女
5.对象和数组结构
ES6 允许按照一定模式从数组和对象中提取值,对变量进行赋值
-
解构赋值虽然很方便,但是解析起来并不容易。对于编译器来说,一个式子到底是模式,还是表达式,没有办法从一开始就知道,必须解析到(或解析不到)等号才能知道。
-
由此带来的问题是,如果模式中出现圆括号怎么处理。ES6 的规则是,只要有可能导致解构的歧义,就不得使用圆括号。
-
但是,这条规则实际上不那么容易辨别,处理起来相当麻烦。因此,建议只要有可能,就不要在模式中放置圆括号。
数组的解构:
const TEAM=['日富美','小梓','小春','花子'];
let[JK,dian,buse,sese]=TEAM;
console.log(JK);//日富美
console.log(dian);//小梓
console.log(buse);//小春
console.log(sese);//花子
对象的解构:
const heimao={
name:'黑见芹香',
age:16,
aihao:function(){
console.log('兼职')
}
};
let{age,name,aihao}=heimao;
console.log(name);//黑见芹香
console.log(age);//16
console.log(aihao);//f(){consle.log('兼职')}
6.Set
Set对象是值的集合,可以按照插入的顺序迭代它的元素。
//声明 set
let s = new Set();
let s2 = new Set(['黑猫','小狐狸','小火龙','砂狼','小狐狸']);
set可以进行添加、删除、检测、清空等操作;
//添加新的元素
s2.add('坦克');
//删除元素
//s2.delete('砂狼');
//检测
console.log(s2.has('小火龙'));// true/false
//清空
//s2.clear();
//console.log(s2);
7.RegExp 构造函数
在 ES5 中,RegExp构造函数的参数有两种情况。
- 第一种情况是,参数是字符串,这时第二个参数表示正则表达式的修饰符(flag)。
- 第二种情况是,参数是一个正则表示式,这时会返回一个原有正则表达式的拷贝。
- 但是,ES5 不允许此时使用第二个参数添加修饰符,否则会报错。
- ES6 改变了这种行为。如果
RegExp构造函数第一个参数是一个正则对象,那么可以使用第二个参数指定修饰符。而且,返回的正则表达式会忽略原有的正则表达式的修饰符,只使用新指定的修饰符。
8.Object.getPrototypeOf()
`Object.getPrototypeOf方法可以用来从子类上获取父类。
Object.getPrototypeOf(ColorPoint) === Point// true
因此,可以使用这个方法判断,一个类是否继承了另一个类。
还有许多在ES6当中的新东西,比如:rest参数、类继承、迭代器等等,需要大家自己的探索了。