---
# System prepended metadata

title: ES6 JS 常見縮寫
tags: [' JavaScript']

---

###### tags: ` JavaScript`

# ES6 JS 常見縮寫

本篇筆記是參考六角學院的教學影片作紀錄。

[六角學院 - JS 常見縮寫](https://courses.hexschool.com/courses/vue-20211/lectures/30451586)

## 語法糖與新增語法
:::info
語法糖不會影響 JS 運作，邏輯是跟一般當前 JS 一樣
但是 新增語法會影響 (ex 箭頭函式)
:::

### 一般寫法
```javascript=
const obj = {
    myname: "我是物件",
    fn: function(){
        return this.myname;
    }
}

console.log(obj.fn()); // 我是物件
```

### 語法糖 ( ES6 縮寫形式)
```javascript=
const obj = {
    myname: "我是物件",
    fn(){
        return this.myname;
    }
}

console.log(obj.fn()); // 我是物件
```

### 新增語法 ( ES6 箭頭函式 )
```javascript=
const obj = {
    myname: "我是物件",
    fn: () =>　{
        return this.myname;
    }
}

console.log(obj.fn()); // undefined
```

因為箭頭函式的關係，會造成 this 的指向不同




---

## 物件內的變數

:::info
物件內變數可以省去同名的部份
:::

### 一般寫法
```javascript=
const person = {
    name: "Tom"
}

const people = {
    person: person
}
```

### 語法糖
```javascript=
const person = {
    name: "Tom"
}

const people = {
    person
}
```



---

## 展開

### 1.陣列的合併

### 一般寫法
```javascript=
const a = [1,2,3];
const b = [4,5];
const all = a.concat(b);
```

### 語法糖
```javascript=
const a = [1,2,3];
const b = [4,5];
const all = [...a,...b];
```

### 2.物件的擴展

```javascript=
const methods = {
    fn1(){ 
    
    },
    fn2(){
    
    }
}

const newMethods = {
    fn3(){
    
    },
    ...methods
}
```

這麼一來，新的物件 newMethods 除了有自己的 function ，還包含了 methods 中的 fn1(), fn2()


### 3.轉成純陣列

```javascript=
const doms = document.querySelectorAll('li'); // __proto__ 的可用方法少了很多一般純陣列可使用的方法

const newdoms = [...doms]; // __proto__ 就有正常純陣列可使用的方法
```



---

## 預設值

### 一般寫法
```javascript=
function sum(a,b){
    if (!b) { b = 2 };
    return a + b ;
}
```

### 語法糖
```javascript=
function sum(a = 2,b = 3){
    return a + b ;
}
```

可以在宣告函式時直接幫參數設定預設值，可以都給預設值，或是只有某個參數給預設值