wsz987

兴趣使然 & 见证成长

0%

ES6 简洁好用的写法 笔记

摘抄至 知乎文章 部分笔记

从数组中获取元素

1
2
3
4
5
// ES5
var array = [1, 2, 3, 4];
var first = array[0];
var third = array[2];
console.log(first, third); // 1 3

等同于:

1
2
3
const array = [1, 2, 3, 4];
const [first, ,third] = array;
console.log(first, third); // 1 3

交换值

1
2
3
4
5
6
7
// ES5
var a = 1;
var b = 2;
var tmp = a;
a = b;
b = tmp;
console.log(a, b); // 2 1

等同于:

1
2
3
4
5
// ES6
let a = 1;
let b = 2;
[a, b] = [b, a];
console.log(a, b); // 2 1

默认参数

1
2
3
4
5
6
7
8
9
10
11
// ES5
function point(x, y, isFlag){
x = x || 0;
y = y || -1;
isFlag = isFlag || true;
console.log(x,y, isFlag);
}
point(0, 0) // 0 -1 true ?
point(0, 0, false) // 0 -1 true ??
point(1) // 1 -1 true
point() // 0 -1 true

Why?

1
2
3
4
5
6
7
8
9
10
11
// ES5
function point(x, y, isFlag){
x = x || 0;
y = typeof(y) === 'undefined' ? -1 : y;
isFlag = typeof(isFlag) === 'undefined' ? true : isFlag;
console.log(x,y, isFlag);
}
point(0, 0) // 0 0 true
point(0, 0, false) // 0 0 false
point(1) // 1 -1 true
point() // 0 -1 true
1
2
3
4
5
6
7
8
// ES6
function point(x = 0, y = -1, isFlag = true){
console.log(x,y, isFlag);
}
point(0, 0) // 0 0 true
point(0, 0, false) // 0 0 false
point(1) // 1 -1 true
point() // 0 -1 true

多个返回值的结构

1
2
3
4
5
6
7
8
9
// ES5
function margin() {
var left=1, right=2, top=3, bottom=4;
return { left: left, right: right, top: top, bottom: bottom };
}
var data = margin();
var left = data.left;
var bottom = data.bottom;
console.log(left, bottom); // 1 4

在第 3 行中,你也可以用一个像这样的数组返回(同时省去了一些编码):

1
return [left, right, top, bottom];

但另一方面,调用者需要考虑返回数据的顺序。

1
2
var left = data[0];
var bottom = data[3];

用 ES6,调用者只需选择他们需要的数据即可(第 6 行):

1
2
3
4
5
6
7
8
// ES6

function margin() {
const left=1, right=2, top=3, bottom=4;
return { left, right, top, bottom };
}
const { left, bottom } = margin();
console.log(left, bottom); // 1 4

参数匹配的结构

1
2
3
4
5
6
7
8
// ES5
var user = {firstName: 'Adrian', lastName: 'Mejia'};
function getFullName(user) {
var firstName = user.firstName;
var lastName = user.lastName;
return firstName + ' ' + lastName;
}
console.log(getFullName(user)); // Adrian Mejia

等同于(但更简洁):注意 ({ firstName, lastName })写法

1
2
3
4
5
6
// ES6
const user = {firstName: 'Adrian', lastName: 'Mejia'};
function getFullName({ firstName, lastName }) {
return `${firstName} ${lastName}`;
}
console.log(getFullName(user)); // Adrian Mejia