盡管JavaScript的擁躉一再?gòu)?qiáng)調(diào)js的面相對(duì)象,然而,或許只有在名為Object的這一類(lèi)型中才能勉強(qiáng)理解出-- well...下面就讓我們一起來(lái)淺析JavaScript中的對(duì)象類(lèi)型Object
ECMAScript中的對(duì)象其實(shí)就是一組數(shù)據(jù)和功能的集合。
ECMAScript中Object是所有對(duì)象的基礎(chǔ)。
理解:Object類(lèi)型是所有它的實(shí)例的基礎(chǔ),換句話說(shuō),Object類(lèi)型所具有的任何屬性和方法也同樣存在于更具體的對(duì)象中。
Object的實(shí)例都具有以下屬性和方法
1.Constructor:保存著用于創(chuàng)建當(dāng)前對(duì)象的函數(shù)
2.hasOwnProperty(propertyName):用于檢查給定的屬性在當(dāng)前對(duì)象實(shí)例中(而不是原型中)是否存在。其中作為參數(shù)的屬性名必須以字符串指定
3.isPrototypeOf(object):用于檢查傳入的對(duì)象是否是另一個(gè)對(duì)象的原型
4.toLocalString():返回對(duì)象的字符串表示,該字符串與執(zhí)行環(huán)境相對(duì)應(yīng)
5.toString():返回對(duì)象的字符串表示
6.valueOf():返回對(duì)象的字符串、數(shù)字或布爾值表示。通常與toString()方法的返回值相同
全局對(duì)象
全局對(duì)象在JavaScript中有著重要的用途: 全局對(duì)象的屬性是全局定義的符號(hào), JavaScript程序可以直接使用,當(dāng)解釋器啟動(dòng)時(shí),它將創(chuàng)建一個(gè)新的全局對(duì)象,并給它一組定義的初始屬性:
全局屬性,比如undefined, Infinity
全局函數(shù),比如parseInt()
構(gòu)造函數(shù),比如Data(),
全局對(duì)象,比如Math和JSON
包裝對(duì)象
看這樣一個(gè)例子:
var s = "hello world!";
var word = s.substring(s.indexOf(" ")+1, s.length);
字符串既然不是對(duì)象,為什么它會(huì)有屬性呢?只要引用了字符串s的屬性,JavaScript就會(huì)將字符串值通過(guò)調(diào)用new String(s)的方式轉(zhuǎn)換成對(duì)象,
同字符串一樣,數(shù)字和布爾值也有相應(yīng)的方法。其他類(lèi)似的包裝類(lèi):
Number object
String object
Boolean Object
Function Object
RegExp Object
Error
SyntaxError
ReferenceError
TypeError
…
不可變的原始值和可變的原始對(duì)象引用
原始值是不可改變的,原始值的比較是值比較, 對(duì)象的比較并非值比較:即使兩個(gè)對(duì)象包含同樣的屬性以及相同的值,他們也不是相等的。我們通常將對(duì)象稱為引用類(lèi)型,對(duì)象的值都是引用,對(duì)象的比較也是引用的比較,當(dāng)且僅當(dāng)他們引用同一個(gè)基獨(dú)享,他們才相等