JavaScript 物件點記法 (dot notation) 與括號記法 (bracket notation)的差異

閱讀時間約 3 分鐘

JavaScript 提供了許多存取物件屬性 (object property) 的方法,其中又以點記法 (dot notation) 以及 括號記法 (bracket notation) 最為常見。兩者都可以達到以下目的:

  • 透過 key 取得物件屬性的值
  • 透過 key 修改物件屬性的值
  • 新增屬性到物件裡面

有鑑於以上的相似之處,我原先以為兩者的差別僅在於語法而已,直到某天使用 for...in 迴圈時,透過點記法發現回傳值全是 undefined,這才開始查詢兩者的差異。

const myPhone = {
name: 'myPhone',
price: 14999,
features: ['long battery life', 'AI camera'],
hardware: {
ram: '8GB',
storage: '64GB'
}
}

// Loop
for (let key in myPhone) {
console.log(myPhone​.key); // undefined
console.log(myPhone[key]); // All value of every key in the object
}


點記法與括號記法的差異之處

  • 點記法直接使用物件屬性 key:object.propertyName
  • 括號記法的括號之內要帶入字串或 Symbol:object[expression]

由於點記法直接使用 key 來找尋物件中對應的屬性值,所以在上述例子中才會回傳 undefined, 因為 myphone 這個物件根本就沒有叫做 key 的屬性啊,key 是我們在迴圈內定義的變數。點記法僅接受靜態鍵 (static key) 而已,也就是物件的屬性名稱。

相對來說,括號記法接受動態鍵 (dynamic key),所以帶入變數的話,會先看變數背後所代表的字串,然後到物件中尋找名稱與字串匹配的屬性。


括號記法中的引號

這邊還有一件值得注意的事情,那就是括號記法內若加上引號會回傳 undefined

// Object declaration
const myPhone = {
name: 'myPhone',
price: 14999,
features: ['long battery life', 'AI camera'],
hardware: {
ram: '8GB',
storage: '64GB'
}
}

// Loop
for (let key in myPhone) {
console.log(myPhone['key']); // undefined
}

這是因為電腦看見 myPhone['key'] 會想要去 myPhone 物件裡面尋找名為 key 的屬性,加上引號之後,key 就不是變數而是字串囉。


Reference

16會員
34內容數
Bonjour à tous,我本身是法文系畢業,這邊會刊登純文組學習網頁開發的筆記。如果能鼓勵更多文組夥伴一起學習,那就太開心了~
留言0
查看全部
發表第一個留言支持創作者!
蕭宇廷的沙龍 的其他內容
cs50 week 4 問題:Recover
閱讀時間約 7 分鐘
JavaScript 陣列學習筆記
閱讀時間約 9 分鐘
你可能也想看
JavaScript 演義 #11: 計謀戰術,算法精準JavaScript 演義 #11: 計謀戰術,算法精準
Thumbnail
avatar
KH Huang
2023-09-21
JavaScript 演義 #9: 關羽過五關,定數如金JavaScript 演義 #9: 關羽過五關,定數如金
Thumbnail
avatar
KH Huang
2023-09-20
JavaScript 演義 #6: 密謀低語,註釋如金JavaScript 演義 #6: 密謀低語,註釋如金
Thumbnail
avatar
KH Huang
2023-09-18
JavaScript 演義 #5: 羽扇指天,語法清晰JavaScript 演義 #5: 羽扇指天,語法清晰
Thumbnail
avatar
KH Huang
2023-09-17
JavaScript 演義 #4: 曹操傳令,語句如箭JavaScript 演義 #4: 曹操傳令,語句如箭
Thumbnail
avatar
KH Huang
2023-09-16
JavaScript 程式札記 : 命名規則、資料型態、物件和陣列JavaScript 的命名規則相當重要,它有些特定的慣例和限制。例如,變數和函式通常使用小駝峰式(firstName)命名。然後 JavaScript 對大小寫敏感,所以lastName和lastname是不同的變數。
Thumbnail
avatar
梧笙
2023-08-08
新手自學筆記 Javascript Object 物件基礎基本語法: 物件的函式: 呼叫函式的方法: this 在物件的用法: JSON 寫法:
avatar
Yu Chun
2023-03-29
【JavaScript 簡史】什麼是 ES5、ES6?網頁開發與 ECMAScript 的小故事在一開始學習前端開發的時候,一直遇到講師在課程內容中提到 ES5、ES6 等關鍵字,當初的我,單純認為 ES5、ES6 是講述 JavaScript 的版本,所以在使用上就沒有想太多,反正就是 JavaScript 1.0 、2.0 的感覺吧?
Thumbnail
avatar
Vivian Yeh
2022-01-15
JavaScript Weekly #468 (下)本系列文為節選第 468 期 JavaScript Weekly 文章的讀後整理心得。 本文為「下」,收錄內容: Vue 3.0 的設計概念 TypeScript 的 const assertion Preact 華麗復活 阿 Svelte 不是很邱?
Thumbnail
avatar
批歪
2019-12-22
JavaScript 簡介:ES6 以及更早之前的版本你可能已經看過 “ES6” 或 “JavaScript ES6” 一詞,並想知道它實際意味著什麼。別再想了,因為我們將深入研究 ES6 究竟是什麼,以及它與 JavaScript 的關係!
Thumbnail
avatar
Ray C
2019-08-09