物件是 JavaScript 中的基礎,這麼說一點也不為過,因為就連一切的根本:根物件 也是一個物件 (註 1 )阿!
我們可以把物件想成是 屬性的容器。
再 {}
放入 屬性,屬性間用逗號串接起來,就是物件的字面值,如果遇到有符號字串,則需要用 ''
( 或者""
) 將 key 包起來。
var myObj = { prop1: 'hello world', "prop-2": 123 };
屬性就是 key/value 的組合
以上面的例子來說,myObj
的第一個屬性的 key 是 prop1
,value 為 'hello world'
。
操作屬性主要有兩種方法
利用 .
操作屬性
只能在 key 不包含符號的狀況下使用,因為 JavaScript 並不會知道後面的符號是 key 的一部分
var myObj = { prop1: 'hello world', "prop-2": 123 };
// read property
console.log(myObj.prop1); // "hello world"
console.log(myObj.prop-2); // NaN
利用 []
操作屬性
可接受 key 中有符號
可以接受變數,會將變數中的值自動轉換成 string 再去讀取
var myObj = { prop1: 'hello world', "prop-2": 123, "777": 456 },
myProperty = 777;
console.log(myObj["prop1"]); // "hello world"
console.log(myObj["prop-2"]); // 123
console.log(myObj[myProperty]); // 456
新增/更新 屬性
新增與更新屬性的語法是一樣的,只要對 屬性 進行指派值的動作,就可以 新增/更新 屬性。
var myObj = { prop1: 'hello world' },
myProperty = 777;
myObj["prop1"] = 'hey world';
myObj["prop-2"] = 123;
myObj[myProperty] = 456;
console.log(myObj["prop1"]); // "hey world"
console.log(myObj["prop-2"]); // 123
console.log(myObj[myProperty]); // 456
我們可以利用 delete
來刪除屬性
var myObj = { prop1: 'hello world', "prop-2": 123, "777": 456 },
myProperty = 777;
delete myObj.prop1;
delete myObj[myProperty];
console.log(myObj); // { "prop-2": 123 }
.
,因為易讀性較高,且可以被 自動補完工具( auto complete ) 支援[]
操作屬性在瀏覽器中的根物件是 window
,根物件有許多內建函式,而需要記得的是,所有全域變數都會是根物件的屬性。在這裡我們可利用 typeof
來看看 window
的屬性:
console.log(typeof window) = "object";
沒錯,所以 JavaScript 中,一切的根本:根物件,就是一個物件。
JavaScript 中的 Array 同樣也可以把他想成是一個屬性的容器。並沒有如其他語言的 Array 一樣是連續的記憶體空間能夠快速存取,套句 JavaScript: The good parts 的方式講
JavaScript 的 Array 是 陣列性格的物件
換句話說,就是屬性名稱為連續數字的物件而已。
那要如何證明呢? 剛剛有提到過,屬性有幾種特性
那就讓我們對 Array 開刀看看吧
var myArray = [1, 2, 3];
console.log(myArray); // [1, 2, 3]
delete myArray["0"];
console.log(myArray); // [empty , 2, 3]
console.log(myArray[0]); // undefined
由這個範例我們可以看到,我們可以刪除 Array 中,名為 "0"
的屬性,也與剛剛所說的 屬性特性 相符。
當然,JavaScript 還是有為這個 "陣列性格的物件" 提供了根多 內建函式 以方便操作。
詢問一下,不太懂
,後面接的 myProperty = 777;是什麼意思,他也是一個屬性給他值嗎?
但為何不要直接寫在{}裡面?
var myObj = { prop1: 'hello world' },
myProperty = 777;
那只是一種字串的接法
var myObj = { prop1: 'hello world',"777": 456}
myProperty = 777;
console.log(myObj[myProperty]); //相當於myObj['777'];
Henry 您好:
雖然離發文已好幾年(或許當年是 ok 的),裡面有些地方怪怪的,留言分享一下
在「利用 [] 操作屬性」這邊
myObj[prop1] 這樣用是會出現錯誤的,因為 prop1 沒有定義
要改成 myObj['prop1'] 才能印出 "hello world"
後面也有類似的地方
例如「新增/更新 屬性」這段
myObj[prop1] = 'hey world' 這樣寫沒辦法改成功
要變成 myObj['prop1'] = 'hey world'
並且 console.log(myObj['prop1'])
這樣才能改到並印出 "hey world"
給您參考一下,謝謝 :)
如果有其他人看到也可以留意一下~
Hi Johnny:
太感謝你的勘誤了 (在當年這語法應該也是不合法的XD)
已經修正了,感謝