1.let 与 const
同其他语言一样,JS中的变量作用域是函数域而不是块级分割的,但涉及到变量提升和闭包等问题时, var 并不能很方便地满足我们的需求,于是出现了 let 与 const 这两个定义变量的关键词;
我们来看一个例子:1
2
3
4
5
6
7
8
9
10
11
12
13
14 var a = 5;
if(true){
var a = 10;
}
console.log(a);//10
```
此时变量 a 输出的值为 10 ,我们可以在这段代码中看到,在 if block 内外都有一个关于 a 的定义,而事实上,他们公用一个内存,为此,ECMAScript 用 let 关键词修复了这一个问题。
```js
let a = 5;
if(true){
let a = 10;
}
console.log(a); //5
当 let 作用域块级作用域中,只要是 let 定义的变量,他就只能在所定义的那个花括号内起作用 。此外 ECMAScript 还添加了另外一个关键词 const ,这个关键词一旦定义了一个变量,这个变量就不能再被修改了。
例如:1
2
3
4const aa = 11;
alert(aa) //11
aa = 22;
alert(aa) //11
2.类
原来的版本里说过,ECMAscript 是没有类的概念的,但在 ECMAScript 6 里面增添了一个 class 的关键词,我们可以把属性和方法定义在一个类里面,而且有类之后,继承那些问题就不用那么麻烦了
例如:1
2
3
4
5
6
7
8
9
10
11
12
13var Animal = (function () {
function Animal(name) {
this.name = name;
}
// Methods
Animal.prototype.doSomething = function () {
console.log("I'm a " + this.name);
};
return Animal;
})();
var lion = new Animal("Lion");
lion.doSomething();//I'm a Lion
在这段代码我们可以看到,lion 这个对象继承了 Animal 原型对象的 doSomething 方法,最后输出了 I’m a Lion
3.解构赋值
通常来说,我们访问数组里面的元素形式可能是这样的:
1 | var first = someArray[0]; |
但使用了解构赋值的话就可以简便地写成:1
var [first, second, third] = someArray;
还有另外一些解构赋值的:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 //数组
var [a,b,c] = [1,2,3];//按顺序
//对象
var {a,b} ={a:1,b:2};
var {a,b} ={b:2,a:1};//不用按顺序
//函数
function test(){
return [a,b,c];
}
var [a1,b1,c1] = test();
//默认值
function test(a=1,b=2){
return [a,b];
}
var [a1,b1] = test(a);// b1 会是默认值 2
4.对象方法
在 ECMAScript 中还新增了几个 object 对象方法,分别是:
- Object.is()//比较严格相等,与 === 相似
Object.is() 与 === 非常相似,不同点在于:1
2
3
4+0 === -0 //true
NaN === NaN //false
Object.is(+0, -0) //false
Object.is(NaN, NaN) //true
- Object.assign(target,source1,source2)//复制对象可枚举属性
1 | Object.assign(target,source1,source2); |
Object.defineProperty
Object.setPrototypeof(a,null)//(裸对象)设置一个对象的prototype对象
1
2
3
4
5
6
7
8
9var Person = {
name: '张三',
birth, //birth: birth
hello(){console.log('hello');}
// hello: function(){console.log('hello');}
};
function(){
return {a,b}
}
5.属性名表达式
在 ECMAScript 6 之前是要用字符串来表示节点,现在可以用本来的属性名去调用它。例如:1
2
3
4
5
6var lastWord = 'last word';
var a = {
'first word': 'hello',
[lastWord]: 'world'
};
a['last word'] == a[lastWord];
6. Set
想要得到没有重复成员的数组,可以用Set去去除重复的数组成员。
例如:
var a = new Set[1,2,3,5,3,4,3];
在这一数组中重复的3会被去掉。
7.Map
var a = {name:2,age:3};
var b = {a:4};
用对象或函数当做属性名
8.for-of 循环
在 ECMAScript 还没出来之前,我们要拿到数组里面的数值时,有人会用 for-each 的方法:
得到的结果:
虽然这一种方法能帮助我们得到数组里面的内容,但它有两个小缺点:
- 不能用return语句返回到外层函数
- 不能使用break语句中断循环
或许有人会用另外一种 for-in 的方法:
但这样写返回的结果是它的索引值:
要写成这样才能得到数组里面的值:
但 for-in 是为普通对象设计的,你可以遍历得到字符串类型的键,因此不适用于数组遍历。
用 for-of 时:
会直接得到结果为:
而 for-of 出现之后不但解决了 for-each 的两个缺陷还解决了 for-in 的所有的缺点。
9.Generator
ES6生成器(可以做游戏对话框)
10.Promise
主要是异步请求1
2
3
4
5
6
7ajax
$.ajax({
url:
method:
data:
}).success().error();
参考资料:
let 与 const 关键字:
http://www.geekcome.com/content-10-2520-1.html
Class 类:
http://www.sitepoint.com/understanding-ecmascript-6-class-inheritance/
ES 资料:
http://www.infoq.com/cn/ecmascript/