# JavaScript 觀念(ES6)
###### tags: `JavaScript`
## JavaScript 常見縮寫
### 物件字面值 Object literals & Enhanced Object Literals
#### 1. 物件內的函式
```javascript=
const obj = {
name: '物件',
// fn: function(){
// return this.name;
//
// 縮寫,Enhanced Object Literals
fn() {
return this.name;
}
}
console.log(obj.fn());//'物件'
```
#### 2. 物件內的變數
```javascript=
const name = '老王'
function fn() {
return this.name;
}
const person = {
//name: '老王'
name,//縮寫
fn
};
console.log(person);
console.log(person.fn());
```
---
### 展開 Spread syntax (...)
#### 1. 不同陣列合併
```javascript=
const groupA = ['A','B','C'];
const groupB = ['D','E'];
//const groupC = groupA.concat(groupB);
const groupC = [...groupA , ...groupB]
console.log(groupC)// ['A', 'B', 'C', 'D', 'E']
```
#### 2. 物件擴展
```javascript=
const methods = {
fn1() {
console.log(1);
},
fn2() {
console.log(2);
}
};
const newMethods = {
...methods,
fn3() {
console.log(3);
}
};
console.log(newMethods);
```
---
### 參數預設值
```javascript=
function sum(a, b = 1) { //加入預設值來避免錯誤
return a + b;
}
console.log(sum(1));
```
---
## 解構
1. 取出特定值作為變數
```javascript=
const person = {
name: '老王',
age: 25,
like: "泡麵"
};
const { name, age } = person;
console.log(name, age);// 老王 25
```
2. 陣列解構
```javascript=
const array = ['A','B','C'];//陣列沒有名稱,只有索引位置
const [c, b, a] = array;// 照索引順序解構
console.log(c, b, a);// A B C
```
3. 解構加展開
```javascript=
const people = {
A: {
name: 'a',
age: 10,
like: 'apple'
},
B: {
name: 'b',
age: 15,
like: 'banana'
},
C: {
name: 'c',
age: 20,
like: 'cake'
}
}
const { A, ...other } = people;
console.log(A, other);
//{name: 'a', age: 10, like: 'apple'} {B: {…}, C: {…}}
```
4. 解構加上重新命名
```javascript=
const people = {
A: {
name: 'a',
age: 10,
like: 'apple'
}
}
let A = {};
const { A: a } = people;
console.log(a);
```
5. 函式的參數解構
```javascript=
const people = {
name: 'a',
age: 10,
like: 'apple'
}
function callName({ name, age }) {
console.log(name, age);
}
callName(people);// a 10
```
---
## 箭頭函式
箭頭函式改寫
```javascript=
// function fn(a, b) {
// return a * b;
// }
// const fn = (a, b) => {
// return a * b;
// }
//單行情況可以再更簡寫
const fn = (a, b) => a * b;
console.log(fn(2, 4));
```
```javascript=
//當參數只有一個時,可以省略()
const fn = n => n;
console.log(fn(2));
```
```javascript=
//當回傳一個物件時,要補上小括號
const fn = () => ({
name: "老王"
});
console.log(fn());
```