JavaScript 對象定義
在 JavaScript 中,對象是王。如果您理解了對象,就理解了 JavaScript。
在 JavaScript 中,幾乎“所有事物”都是對象。
- 布爾是對象(如果用 new 關鍵詞定義)
- 數字是對象(如果用 new 關鍵詞定義)
- 字符串是對象(如果用 new 關鍵詞定義)
- 日期永遠都是對象
- 算術永遠都是對象
- 正則表達式永遠都是對象
- 數組永遠都是對象
- 函數永遠都是對象
- 對象永遠都是對象
所有 JavaScript 值,除了原始值,都是對象。
JavaScript 原始值
原始值指的是沒有屬性或方法的值。
原始數據類型指的是擁有原始值的數據。
JavaScript 定義了 5 種原始數據類型:
- string
- number
- boolean
- null
- undefined
原始值是一成不變的(它們是硬編碼的,因此不能改變)。
假設 x = 3.14,您能夠改變 x 的值。但是您無法改變 3.14 的值。
值 | 類型 | 注釋 |
---|---|---|
"Hello" | string | "Hello" 始終是 "Hello" |
3.14 | number | 3.14 始終是 3.14 |
true | boolean | true 始終是 true |
false | boolean | false 始終是 false |
null | null | (object) null 始終是 null |
undefined | undefined | undefined 始終是 undefined |
對象是包含變量的變量
JavaScript 變量能夠包含單個的值:
實例
var person = "Bill Gates";
對象也是變量。但是對象能夠包含很多值。
值按照名稱 : 值對的形式編寫(名稱和值以冒號分隔)。
實例
var person = {firstName:"Bill", lastName:"Gates", age:62, eyeColor:"blue"};
JavaScript 對象是命名值的集合。
對象屬性
JavaScript 對象中的命名值,被稱為屬性。
屬性 | 值 |
---|---|
firstName | Bill |
lastName | Gates |
age | 62 |
eyeColor | blue |
以名稱值對書寫的對象類似于:
- PHP 中的關聯數組
- Python 中的字典
- C 中的哈希表
- Java 中的哈希映射
- Ruby 和 Perl 中的散列
對象方法
方法是可以在對象上執行的動作。
對象屬性可以是原始值、其他對象以及函數。
對象方法是包含函數定義的對象屬性。
屬性 | 值 |
---|---|
firstName | Bill |
lastName | Gates |
age | 62 |
eyeColor | blue |
fullName | function() {return this.firstName + " " + this.lastName;} |
JavaScript 對象是被稱為屬性和方法的命名值的容器。
您將在下一章中學到更多有關方法的知識。
創建 JavaScript 對象
通過 JavaScript,您能夠定義和創建自己的對象。
有不同的方法來創建對象:
- 定義和創建單個對象,使用對象文字。
- 定義和創建單個對象,通過關鍵詞 new。
- 定義對象構造器,然后創建構造類型的對象。
在 ECMAScript 5 中,也可以通過函數 Object.create()
來創建對象。
使用對象字面量
這是創建對象最簡答的方法。
使用對象文字,您可以在一條語句中定義和創建對象。
對象文字指的是花括號 {}
中的名稱:值對(比如 age:62)。
下面的例子創建帶有四個屬性的新的 JavaScript 對象:
實例
var person = {firstName:"Bill", lastName:"Gates", age:62, eyeColor:"blue"};
空格和折行不重要。對象定義可橫跨多行:
實例
var person = { firstName:"Bill", lastName:"Gates", age:62, eyeColor:"blue" };
使用 JavaScript 關鍵詞 new
下面的例子也創建了帶有四個屬性的新的 JavaScript 對象:
實例
var person = new Object(); person.firstName = "Bill"; person.lastName = "Gates"; person.age = 50; person.eyeColor = "blue";
上面的兩個例子結果是一樣的。無需使用 new Object()
。
出于簡易性、可讀性和執行速度的考慮,請使用第一種創建方法(對象文字方法)。
JavaScript 對象是易變的
對象是易變的:它們通過引用來尋址,而非值。
如果 person 是一個對象,下面的語句不會創建 person 的副本:
var x = person; // 這不會創建 person 的副本。
對象 x 并非 person 的副本。它就是 person。x 和 person 是同一個對象。
對 x 的任何改變都將改變 person,因為 x 和 person 是相同的對象。
實例
var person = {firstName:"Bill", lastName:"Gates", age:62, eyeColor:"blue"} var x = person; x.age = 10; // 這將同時改變 both x.age 和 person.age
注釋:JavaScript 變量不是易變的。只有 JavaScript 對象如此。