---
# System prepended metadata

title: 何謂物件取值？

---

> 如果有記憶吐司就好了...
# 何謂物件取值？

物件本身的屬性都是字串,字串可包含很多種字元,例如:數字 **"1"** 、特殊字元 **"&deposit"** 、文字 **"居住城市"** ...等等。因此,當我們要取物件內的值時,可以用以下兩種方法。

## 用 . 取值
輸入物件名稱加 **.** 後面放入屬性名稱。

```
let family = {
   motherName: "Mary",
   "&deposit": 100000,
   1: "1",
   居住城市: "台中市"
};
console.log(family.motherName); // Mary
console.log(family."&deposit"); // 報錯
console.log(family.居住城市); // 台中市
console.log(family.1); // 報錯

```


## 用 [] 取值
輸入物件名稱加上 **[]** ,中括弧內用單/雙引號包住屬性名稱,若屬性開頭是數字可不加單/雙引號,若是變數則不須加引號。
```
let family = {
   motherName: "Mary",
   "&deposit": 100000,
   1: "1",
   居住城市: "台中市"
};
console.log(["motherName"]);// Mary
console.log(["&deposit"]);// 100000
console.log(["1"]);// 1
console.log(["居住城市"]);// 台中市

```
### 當我在物件外面又宣告了一個變數,並賦予物件內的屬性,此時我要如何取變數被賦予屬性的值呢?

```
let family = {
   motherName: "Mary",
   "&deposit": 100000,
   1: "1",
   居住城市: "台中市"
};

let a = "motherName";

console.log(a); // 回傳motherName
console.log(family.a); // 回傳undefined
console.log(family[a]); // 回傳Mary
```
### 發生了什麼事呢??

**console.log(a) -** 僅是印出變數a被賦予的值,而不是屬性內的值。

**console.log(family.a) -** 用 **.** 取值,僅會找到該物件family內去找尋對應的屬性名稱,若沒有則回傳undefined。

**console.log(family[a]) -** 用 **[]** 取值,不僅會找到該物件family內找尋對應的值,還會在物件外找尋對應的變數,並幫您帶入至物件內
```
let family = {
   motherName: "Mary",
   "&deposit": 100000,
   1: "1",
   居住城市: "台中市"
};

let a = "motherName"; 

console.log(family[a]);

// 當物件內沒有找到對應的a,則往外找到變數a
// let a = "motherName"; 

// 此時a就被放入物件內,而找到對應屬性的值並回傳Mary
// let family = {
//    a: "Mary",
//    "&deposit": 100000,
//    1: "1",
//    居住城市: "台中市"
// };
```
## 結語
**用 . 取值** - 比較簡單的方式,但只限於取一般文字字串,若使用於開頭為數字or特殊字元時,會回傳錯誤。

**用 [] 取值** - 比較全面的一種方式,可以取代用 **.** 取值,基本上可以取物件內各式各樣的屬性。

參考資料:
[JavaScript 核心篇 學習筆記: Chap.30 — 物件取值，新增與刪除](https://medium.com/@yining1204/javascript-%E6%A0%B8%E5%BF%83%E7%AF%87-%E5%AD%B8%E7%BF%92%E7%AD%86%E8%A8%98-chap-30-%E7%89%A9%E4%BB%B6%E5%8F%96%E5%80%BC-%E6%96%B0%E5%A2%9E%E8%88%87%E5%88%AA%E9%99%A4-b7a3a37a6bd7)
[何謂物件取值？在什麼時機上會用到？點(.)和方括號([])取值的不同之處](https://hackmd.io/PgcOSX3DQui5Iex2UVmdgQ)
[何謂物件取值？在什麼時機上會用到？點和方括號取值的不同之處](https://hackmd.io/@LRcGdkjGRvKUfXFwuV2JVA/B14kVlS8K)