Objects

JavaScript 有 7 種資料類型,6 種只能儲存一個值,但物件能儲存多個 key: value,key 為 string 或 symbol,value 可以為任何值。

let user = new Object(); // "object constructor" syntax
let user = {};  // "object literal" syntax

Literals 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?