對(duì)象是由屬性和方法的集合組成的數(shù)據(jù)類型。
就像許多其他編程語言一樣,可以將JavaScript中的對(duì)象與現(xiàn)實(shí)生活中的對(duì)象進(jìn)行比較。
在JavaScript中,基本上所有東西都是對(duì)象:
字符串可以是對(duì)象(如果使用new關(guān)鍵字定義)
數(shù)字可以是對(duì)象(如果使用new關(guān)鍵字定義)
布爾值可以是對(duì)象(如果使用new關(guān)鍵字定義)
日期始終是對(duì)象
數(shù)學(xué)永遠(yuǎn)是對(duì)象
數(shù)組始終是對(duì)象
正則表達(dá)式始終是對(duì)象
函數(shù)永遠(yuǎn)是對(duì)象
Object就是對(duì)象
除原語外,所有JavaScript值都是對(duì)象。
原始值是沒有屬性或方法的值。
在JavaScript中,有5種原始類型:
string
number
boolean
null
undefined
JavaScript變量只能包含一個(gè)值。
var user = "(cainiaoplus.com)";測試看看?/?
對(duì)象也是變量,但是對(duì)象可以包含許多值。
可以將對(duì)象寫為name:value對(duì),并用冒號(hào)(:)分隔。
var user = {firstName:"維沙爾", lastName:"喬達(dá)里", age:22, location:"新德里"};測試看看?/?
JavaScript對(duì)象是無序?qū)傩缘募稀?/p>
屬性是對(duì)象中名稱和值之間的關(guān)聯(lián),并且可以包含任何數(shù)據(jù)類型。
屬性通常是指對(duì)象的特征。
屬性 | 屬性值 |
---|---|
firstName | 維沙爾 |
lastName | 喬達(dá)里 |
age | 22 |
location | 新德里 |
您將在下一章中了解有關(guān)屬性的更多信息。
方法是作為對(duì)象屬性值的函數(shù),因此是對(duì)象可以執(zhí)行的任務(wù)。
方法存儲(chǔ)在屬性中作為函數(shù)定義。
屬性 | 適當(dāng)?shù)膬r(jià)值 |
---|---|
firstName | 維沙爾 |
lastName | 喬達(dá)里 |
age | 22 |
location | 新德里 |
getName | function() {返回 this.firstName + " " + this.lastName;} |
注意:方法是作為屬性存儲(chǔ)的函數(shù)。
JavaScript有許多預(yù)定義的對(duì)象。另外,您可以創(chuàng)建自己的對(duì)象。
有多種創(chuàng)建新對(duì)象的方法:
使用對(duì)象常量,它使用大括號(hào):{}
使用對(duì)象構(gòu)造函數(shù),它使用new Object()
或者,您可以先創(chuàng)建一個(gè)構(gòu)造函數(shù) ,然后示例化一個(gè)調(diào)用該函數(shù)的對(duì)象
使用對(duì)象常量是創(chuàng)建JavaScript對(duì)象的最簡單方法。
使用對(duì)象常量,您可以在一個(gè)語句中定義和創(chuàng)建一個(gè)對(duì)象。
下面的示例創(chuàng)建一個(gè)具有四個(gè)屬性的新JavaScript對(duì)象:
var user = {firstName:"維沙爾", lastName:"喬達(dá)里", age:22, location:"新德里"};測試看看?/?
對(duì)象定義可以跨越多行:
var user = { firstName: "維沙爾", lastName : "喬達(dá)里", age : 22, location : "新德里" };測試看看?/?
使用對(duì)象構(gòu)造函數(shù)是創(chuàng)建JavaScript對(duì)象的另一種方法。
下面的示例創(chuàng)建一個(gè)具有四個(gè)屬性的新JavaScript對(duì)象:
var user = new Object(); user.firstName = "維沙爾"; user.lastName = "喬達(dá)里"; user.age = 22; user.location = "新德里";測試看看?/?
上面的兩個(gè)示例完全相同。無需使用new Object()。
使用對(duì)象字面量是更常見和首選的方法,因?yàn)樗惶赡艹霈F(xiàn)不一致和意外結(jié)果。
另外,您可以通過以下兩個(gè)步驟創(chuàng)建對(duì)象:
通過編寫構(gòu)造函數(shù)定義對(duì)象類型(約定中使用大寫首字母)
使用new關(guān)鍵字創(chuàng)建對(duì)象的示例
下面的示例通過編寫構(gòu)造函數(shù)定義對(duì)象類型:
function User(fname, lname, age, loc) { this.firstName = fname; this.lastName = lname; this.age = age; this.location = loc; }
現(xiàn)在我們可以創(chuàng)建一個(gè)名為user1的對(duì)象,如下所示:
var user1 = new User("維沙爾", "喬達(dá)里", 22, "新德里");測試看看?/?
我們將在本教程的后面部分討論構(gòu)造函數(shù)。
可變是一種可以更改的變量。在JavaScript中,只有對(duì)象和數(shù)組是可變的,不是原始值。
可變對(duì)象是一種對(duì)象,其狀態(tài)在創(chuàng)建后即可修改。
不可變對(duì)象是一旦創(chuàng)建對(duì)象便無法更改其狀態(tài)的對(duì)象。
字符串和數(shù)字是不可變的。讓我們用一個(gè)示例來理解這一點(diǎn):
var immutableString = "Hello"; // 在上面的代碼中,創(chuàng)建了一個(gè)帶有字符串值的新對(duì)象。 immutableString = immutableString + "World"; // 我們現(xiàn)在將“World”附加到現(xiàn)有值。
在將“ immutableString”附加到字符串值后,將發(fā)生以下事件:
檢索“ immutableString”的現(xiàn)有值
“World”附加到“ immutableString”的現(xiàn)有值之后
然后將結(jié)果值分配給新的內(nèi)存塊
現(xiàn)在," immutableString" 對(duì)象指向新創(chuàng)建的內(nèi)存空間
以前創(chuàng)建的內(nèi)存空間現(xiàn)在可用于垃圾回收
對(duì)象是可變的:它們是通過引用而不是值來尋址的。
如果user是對(duì)象,則以下語句將不會(huì)創(chuàng)建該用戶的副本:
var x = user; // 這不會(huì)創(chuàng)建user副本.
對(duì)象x不是user的副本,它是user。x和user是同一個(gè)對(duì)象。
對(duì)x的任何更改也將更改user,因?yàn)閤和user是相同的對(duì)象。
var user = {firstName:"維沙爾", lastName:"喬達(dá)里", age:22, location:"新德里"}; var x = user; x.location = "Goa";// 這將同時(shí)更改x.location和user.location測試看看?/?
在JavaScript中,對(duì)象是引用類型。即使兩個(gè)不同的對(duì)象具有相同的屬性,它們也永遠(yuǎn)不會(huì)相等。
// 兩個(gè)變量,兩個(gè)具有相同屬性的不同對(duì)象 var fruit = {name: "apple"}; var fruitbear = {name: "apple"}; fruit == fruitbear; // 返回 false fruit === fruitbear; // 返回 false測試看看?/?
僅將同一對(duì)象引用與其自身進(jìn)行比較會(huì)得出true:
// 兩個(gè)變量,一個(gè)對(duì)象 var fruit = {name: "apple"}; var fruitbear = fruit; // 將fruit對(duì)象引用分配給fruitbear // 這里的fruit 和 fruitbear 都指向同一個(gè)對(duì)象 fruit == fruitbear; // 返回 true fruit === fruitbear; // 返回 true測試看看?/?