###### tags: `學習` `JS縮寫` `JavaScript`
{%hackmd BJrTq20hE %}
# JS 常見縮寫
## 物件下的縮寫
### 1.物件內函式的縮寫
原始物件內函式的寫法
```===javascript
const obj = {
name: "小明",
fn: function () {
return this.name;
}
};
console.log(obj.fn())//"小明"
```
縮寫後
#### 1.1把: fnuction都去除
```===javascript
const obj = {
name: "小明",
fn () {
return this.name;
}
};
console.log(obj.fn())//"小明"
```
#### 1.2箭頭函式,但是會出事喔!
```===javascript
const obj = {
name:"小明",
fn:()=>this.name
}
console.log(obj.fn());//undifined
```
在使用箭頭函式的時候要注意"this",因為箭頭函式沒有自己的this,所以this會指向window,window中沒有name:"小明"所以會產生undifined
[箭頭函式this的指向差異 (見範例7.)](https://hackmd.io/uwnd2kuWQSqXw7J_Z4W8YA)
### 2.物件字面值
#### 2.1函式
原始物件內函式的寫法
```===javascript
const obj = {
name: "小明",
fn: function () {
return this.name;
}
};
console.log(obj.fn())//"小明"
```
縮寫後
把: fnuction都去除
```===javascript
const obj = {
name: "小明",
fn () {
return this.name;
}
};
console.log(obj.fn())//"小明"
```
#### 2.2變數
原始寫法
```===javascript
const person = {
name: "小明",
};
const people = {
person:person
}
console.log(people)//{name: "小明"}
```
縮寫後
```===javascript
const person = {
name: "小明",
};
const people = {
person
}
console.log(people)//{name: "小明"}
```
屬性(person這個物件內的屬性)與變數相同的時候只要寫一次就行。
### 3.展開
#### 3.1 陣列的展開
原始的陣列展開
```===javascript
const a = [1,2,3];
const b = [4,5,6];
const c = a.concat(b);
console.log(c)//[1,2,3,4,5,6]
```
縮寫的陣列展開
```===javascript
const a = [1,2,3];
const b = [4,5,6];
const c = [...a,...b];
console.log(c)//[1,2,3,4,5,6]
```
#### 3.2 物件的展開
```===javascript
const obj = {
fna(){console.log('a')},
fnb(){console.log('b')}
};
const newObj = {
...obj,
fnc(){console.loc('c')}
};
console.log(newObj)//{fna:f,fnb:f,fnc:f}
```
#### 3.3 轉成純陣列
```===html
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
```
```===javascript
const list = document.querySelectorAll('li')
console.log(list)//[object NodeList] (3)["<li/>","<li/>","<li/>"]會得到類陣列,無法使用全部陣列的功能
const newlist = [...list]
//使用...轉化為純陣列
// [object Array] (3)
console.log(newlist)[<li>1</li>,<li>2</li>,<li>3</li>]
```
### 4.預設值
原始預設值寫法
```===javascript
function plus(a,b){
if(!b){b=2}
//如果b沒有傳入參數預設值為2
return a+b
}
console.log(plus(1))///3
```
縮寫後
```===javascript
function plus(a,b=2){
return a+b
}
console.log(plus(1))///3
```