1. 默认参数的问题,es5和es6的写法不同,请看下面代码:
// es5的写法
{
function f(x, y, z) {
if (y === undefined) {
y = 7;
}
if (z === undefined) {
z = 42;
}
return x + y + z;
}
console.log(f(1));
}
// es6的写法
{
function f1(x, y = 4, z = 12) {
return x + y + z;
}
console.log(f1(1));
}
2. 对于可变参数的问题,es5采用 Array.prototype.slice.call(arguments)来获得 f() 的可变参数列表,arguments指向的是 f() 的参数列表,以数组的形式返回。es6采用扩展运算符的形式来获取函数的参数列表,简化了代码。
// es3,es5可变参数
{
function f() {
// 返回可变参数的列表,a是一个数组
var a = Array.prototype.slice.call(arguments);
var sum = 0;
a.forEach(function (item) {
sum += item + 1;
});
return sum;
}
console.log(f(1,2,3));
}
// es6的写法
{
function f3(...a) {
let sum = 0;
a.forEach(item=>{
sum += item + 1;
});
return sum;
}
console.log(f3(1,2,3));
}
3. 关于扩展运算符的用法,还有很多,比如可以用于数组的合并。
es5合并数组用concat()方法,es6合并数组用扩展运算符来进行合并数组,简化了代码。
{
// es5合并数组
var arr = ['hello', 7];
var arr1 = [1,2].concat(arr);
console.log(arr1);
}
{
// es6使用扩展运算符来合并数组
let arr = ['hello',7];
let arr1 = [1,2,...arr];
console.log(arr1);
}