Objects
JavaScript 有 7 種資料類型,6 種只能儲存一個值,但物件能儲存多個 key: value,key 為 string 或 symbol,value 可以為任何值。
let user = new Object(); // "object constructor" syntax
let user = {}; // "object literal" syntaxLiterals and properties
let user = { // an object
name: "John", // by key "name" store value "John"
age: 30, // by key "age" store value 30
"likes birds": true, // multiword property name must be quoted 最後一個加上,
};
// get fields of the object:
alert( user.name ); // John
alert( user.age ); // 30
// 刪除物件資料
delete user.age;Square brackets
let user = {};
// this would give a syntax error
user.likes birds = true
// set
user["likes birds"] = true;
// get
alert(user["likes birds"]); // true
// delete
delete user["likes birds"];
let key = "likes birds";
// same as user["likes birds"] = true;
user[key] = true;
// key obtain property name as a result of expression
let user = {
name: "John",
age: 30
};
let key = prompt("What do you want to know about the user?", "name");
// access by variable
alert( user[key] ); // John (if enter "name")Computed properties
Reserved words are allowed as property names
任意的名稱都可以作為屬性名稱,只有 _proto_ 不行。
Property value shorthand
通常會使用現存變數的名稱作為 key,可以簡寫為一個值,如下範例。
Existence check
要取得物件不存在的屬性不會出現錯誤,會返回 undefined,可以用來檢測屬性是否存在;也可以用 in 檢查。
The “for…in” loop
物件的迴圈不適用 for { ; ; } 而是 for { in } ,
Ordered like an object
整數的屬性依照大小排列,其他的屬性依寫得先後順序排列。
Copying by reference
原始值會複製一樣的值進去,物件會指到相同的記憶體,只要有一個物件的值改變,所有指向相同記憶體的物件都會改變
Comparison by reference
== 跟 === 對物件來說是一樣的,只有當 2 個變數都只到相同記憶體時才相同。
Const object
const 在同個記憶體內改變物件不會出現錯誤,除非將變數指向另一個記憶體才會出現錯誤。
Cloning and merging, Object.assign
通常會使用變數指到相同的記憶體,但若想要複製獨立一樣的物件,也是可行的。
Last updated
Was this helpful?