---
# System prepended metadata

title: "I got the ke I got the { \U0001F5DD: \U0001F511, }"
tags: [Javascript, 六角學院, JS 直播班 - 2021 秋季班]

---

# I got the ke I got the { 🗝: 🔑, }
## 何謂物件取值？在什麼時機上會用到？點(.)和方括號([])取值的不同之處

![](https://i.imgur.com/pi2vxXF.jpg =80%x)
> Javascript是一個物件導向的語言，除了 null,undefined 之外的型別均可以看作是物件，
> 他們均會從物件的原型上繼承該行別所擁有的原型propotype，如下圖所示
> 我先定義了變數並賦予他們各個類別的值，
> ![](https://i.imgur.com/OMaQ7Q6.png)
> 從瀏覽器的開發者工具console頁面裡使用.的方式呼叫物件的屬性，
> ![](https://i.imgur.com/lCB0ttz.png)
> 而undefined跟null可以觀察到他們並沒有任何物件的屬性被繼承。
> ![](https://i.imgur.com/2ALlzkC.gif)

物件要讀取屬性使用的方法有透過.keyName(靜態取值)跟[]陣列標記(動態取值)，兩種
靜態取值的方式就是透過obj.keyName的方式取得keyName屬性的值
靜態取值的方式無法取得開頭是數字的物件屬性或是存放於變數名的屬性
```javascript=
let obj = {
    1: '數字keyName',
    str: '文字keyName',
    hulu: 'Nice'
};
let getStr = 'str';

conosle.log(obj.hulu) // "Nice"
console.log(obj.1) // 程式報錯 Uncaught SyntaxError: Unexpected number
console.log(obj.getStr) // undefined 
// 以這個情況下來看，使用靜態取值的方式，是無法正確的取到屬性的值
// 這種情況之下就需要使用動態取值的方式，[表達式] 因為[]內部為表達式的關係，就能正常的取到
// 原本使用靜態取值的方式無法獲得的值

console.log(obj[1]) // "數字KeyName"
console.log(obj[getStr]) // "文字KeyName"
console.log(obj["hulu"]) // "Nice"
// 需要記住如果要取文字名稱要加上字串符號""

```

## 寫在結尾
普遍大部分的使用時機都會是用靜態的取值方法，除非遇上一些比較奇怪的obj才會使用到obj["💩"] = 🥴💩😵
或是說你需要使用變數來作為取得keyName的行為才有機會用到動態


### 參考資料
[Object - MDN](https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Object)

###### tags: `Javascript` `JS 直播班 - 2021 秋季班` `六角學院`