引用型別之Object

一瓶微風發表於2020-10-06

引用型別

引用類的值(物件)是引用型別的一個例項。在ECMAScript中,引用型別是一種資料結構,用於將資料和功能組織在一起。

物件是某個特定引用型別的例項。新物件是使用new操作符後跟一個建構函式來建立的。建構函式本身就是一個函式,只不過該函式是出於建立新物件的目的而定義的。

var person=new Object();

這行程式碼建立了Object引用型別的一個新例項,然後把該例項儲存在了變數person中。使用的建構函式是Object,它只為新物件定義了預設的屬性和方法。ECMAScript提供了很多原生引用型別。

Object型別

建立Object例項的方式:

第一種,使用new操作符後跟Object建構函式,如下

var person=new Object();
person.name="breeze";
person.age="20";

另一種方式是使用物件字面量表示法。物件字面量是物件定義的一種簡寫形式

var person={
    name:"breeze",
    age:20
}

物件字面量是物件定義的一種簡寫形式,目的在於簡化建立包含大量屬性的物件的過程。

在使用物件字面量語法時,屬性名也可以使用字串,如下

var person={
    "name":"breeze",
    "age":20
}

這個例子建立了一個物件,包含兩個屬性:name和age,但這裡的數值屬性名會自動轉換成字串,另外,使用物件字面量語法的時候,也可以留花括號然後自定義屬性和方法,例如

var person={};
person.name="breeze";
person.age=20;

注意點:物件字面量語法,更推薦在只考慮物件屬性名的可讀性時使用

例項

雖然可以使用前面任何一種方法來定義物件,但是物件字面量也是向函式傳遞大量引數的首選方式,例如

    function dispalyInfo(args){
        var output="";
        if(typeof args.name == "string"){
            output += "name:"+args.name+'\n'
        }
        if(typeof args.age =="number"){
            output += "age:"+args.age+'\n'
        }
        alert(output)
    }

    dispalyInfo({
        name:"breeze",
        age:20
    })

	//name:breeze
	//age:20

在這個例子中,函式displayInfo( )接收一個名為args的引數,這個引數可能帶有名為name和age的屬性,也可能啥也沒有,在這個函式內部,我們通過typeof操作符來檢測每個屬性是否存在,然後基於相應的屬性來構建出要顯示的資訊。我們呼叫這個函式時,所使用的時物件字面量語法來指定不同的資料。

注:這種傳參模式最適合需要向函式傳入大量可選引數的情形。

物件屬性

一般來說,訪問物件屬性都是用的點表示法,不過也可以使用方括號來訪問物件的屬性。在使用方括號語法時,應該將要訪問的屬性以字串的形式放在方括號中,例子如下

alert(person.name)
alert(person["name"])

從功能上,兩種方法沒有區別,但方括號語法的主要優點是可以通過變數來訪問屬性,例如

var person={
    "name":"breeze",
    "age":20
}
var propertyName="name";
alert(person[propertyName]); //"breeze"

相關文章