javascript語言精粹筆記(二)對象

  1. 對象字面量
var tom = {
    height:165+"cm",
    weight:55+"kg",
    bigtom:{
      catsex:"tabby",
    }
}

在javascript中 對象的創建可以用對象字面量快速的創建 對象字面量其實就是在大括號內的所有key-value對 注意! 屬性的創建結尾需要用,而不是;這可不是表達式。中間不是等於 而是:。 對象是可以嵌套的。
2. 檢索

var height =console.log(tom.height) || "unkonwn";
console.log(tom.weight);
console.log(tom.bigtom.catsex);

我們一般通過.的方式來訪問對象的屬性 注意! 如果這個屬性並不存在 那麼會發生typeError異常 推薦用 ||的方式來避免 如果不存在 則返回字符串 unkonwn

3. 對象的更新

對象的屬性允許被更新 比如 tom.height = 166 +"cm"
如果這個屬性本身不存在 會被創建 tom.name = "tom."

4. 對象的引用
對象永遠通過引用來傳遞 他們不會被複制

var tomCopy = tom;
tomCopy.age = 16;
var tomAge = tom.age; //16
//兩者指向的是同一個對象

4. 原型
所有的對象都有一個基礎原型,當獲取一個對象的某個屬性時 如果當前對象沒有,則根據他的原型鏈逐級向上查找。但更新某個對象的屬性時 並不會觸發向上查找。原型是相對的一種動態關係,如果你修改了他原型的某個屬性 那麼他會立即影響其下方的所有對象。

5. 反射
檢查對象的一些屬性的過程被稱爲反射 可以使用typeof來輸出他 但要注意的是,在其原型鏈上的所有屬性(方法同樣可以作爲屬性)都會接受並反射回去 所以我們可以使用
tom.hasOwnProperty("height")//屬性名必須用''來包含他來探測是否是當前對象裏面的屬性 如果是爲ture 否則false

6. 枚舉
for in語句讓我們快速遍歷一個對象的屬性 但是這會包括原型中的屬性或者是你根本不需要的屬性 我們可以通過typeof或者hasOwn來過濾

for (var name in tom.sex) {
    var sex_curr = tom.sex;
    if(typeof (tom.sex[name]) !== ("function")){
        console.log(name)
        console.log(sex_curr[name]);
    }
}//這裏對於屬性的訪問都必須使用[]包含 因爲這裏的name是變量而不是字符串字面量 他回去查詢名爲name的屬性而不是他的具體引用

但要注意的是 for in循環在查找過程中 他尋找到的屬性順序是隨機的 不確定的 如果要建立順序查找 那麼需要建立一個查詢用數組,比如下方。

var query = ["height", "weight",];
for(var i=0;i<query.length; i++){
    console.log(tom[query[i]]);
    //這裏同樣要使用[]來索引
    //可以簡單的這樣區分該使用.還是[]索引。 當裏面的值需要去查找建立 那麼就用[],如果是個字符串字面量 也就是真實已經存在非常確定的值 用.來索引。
}

這樣他的查詢次數固定 並且順序固定 且不會查詢原型鏈上的屬性

7. 刪除
delete tom.height;
刪除可以用來刪除對象中的某個屬性 他並不會影響原型鏈上的屬性。在刪除之後 有可能讓原型鏈上原本被覆蓋的屬性透現出來。

8. 減少全局變量污染

var myapp = {};
myapp.tom = {
    height:165+"cm",
    weight:55+"kg",
    sex:{
        catsex:"tobby",
    },
    num:function () {
        console.log(1);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章