一、ES6部分
1、函数的参数默认值
function sum(x = 1, y = 2, z = 3) {
return x + y + z
};
console.log(sum(4, 5)); //输出12
由于没有传入参数z,它的值默认为3。因此,4 + 5 + 3 ==12。
在ES6之前,上面的函数我们只能写成这样:
function sum(x, y, z) {
if (x === undefined)
x = 1;
if (y === undefined)
y = 2;
if (z === undefined)
z = 3;
return x + y + z;
};
有了ES6的参数默认值,代码可以少写好几行
2、声明展开和剩余参数
在ES5中,可以用apply()函数把数组转化为参数。为此,ES6有了展开操作符(...)。
举例来说,考虑上面声明的sum函数。可以执行如下代码来传入参数x、y和z:
var params = [3, 4, 5];
console.log(sum(...params));
// 以上代码和下面的ES5代码的效果是相同的:
var params = [3, 4, 5];
console.log(sum.apply(undefined, params));
在函数中,展开操作符(...)也可以代替arguments,当作剩余参数使用。
function restParamaterFunction(x, y, ...a) {
return (x + y) * a.length;
}
console.log(restParamaterFunction(1, 2, "hello", true, 7)); //输出9;
//以上代码和下面代码的效果是相同的:
function restParamaterFunction(x, y) {
var a = Array.prototype.slice.call(arguments, 2);
return (x + y) * a.length;
};
3、数组解构
(1)可以用来一次初始化多个变量
var [x, y] = ['a', 'b'];
//以上代码和下面代码的效果是相同的:
var x = 'a';
var y = 'b';
(2)数组解构也可以用来进行值的互换,而不需要创建临时变量,如下:
[x, y] = [y, x];
//以上代码和下面代码的效果是相同的:
var temp = x;
x = y;
y = temp;
这对你学习排序算法会很有用,因为互换值的情况很常见。
(3)属性简写的功能,它是对象解构的另一种方式
var [x, y] = ['a', 'b'];
var obj = { x, y };
console.log(obj); // { x: "a", y: "b" }
//以上代码和下面代码的效果是相同的:
var x = 'a';
var y = 'b';
var obj2 = { x: x, y: y };
console.log(obj2); // { x: "a", y: "b" }
4、使用类进行面向对象编程
JavaScript面向对象编程还是基于原型实现的
声明类的方式
function Book(title, pages, isbn) { //{1}
this.title = title;
this.pages = pages;
this.isbn = isbn;
}
Book.prototype.printTitle = function () {
console.log(this.title);
}
可以用ES6把语法简化如下:
class Book { //{2}
constructor(title, pages, isbn) {
this.title = title;
this.pages = pages;
this.isbn = isbn;
}
printIsbn() {
console.log(this.isbn);
}
}
类的继承
class ITBook extends Book { //{1}
constructor(title, pages, isbn, technology) {
super(title, pages, isbn); //{2}
this.technology = technology;
}
printTechnology() {
console.log(this.technology);
}
}
let jsBook = new ITBook('学习JS算法', '200', '1234567890', 'JavaScript');
console.log(jsBook.title);
console.log(jsBook.printTechnology());
我们可以用extends关键字扩展一个类并继承它的行为(行{1})。在构造函数中,我们也可以通过super关键字引用父类的构造函数(行{2})