a. js對象都是關聯數組 b. inherit();返回一個繼承自原型對象p的屬性的新對象 對象的方法: 創建(create) 設置(set) 查找(query) 刪除(delete) 檢測(test)和枚舉(enumerate) 創建對象的方法: 對象直接量 關鍵字new es5中的Object ...
a. js對象都是關聯數組
b. inherit();返回一個繼承自原型對象p的屬性的新對象
對象的方法:
創建(create) 設置(set) 查找(query) 刪除(delete) 檢測(test)和枚舉(enumerate)
創建對象的方法:
對象直接量 關鍵字new es5中的Object.create()
var aa=Object.create({"x":0,"y":1})
屬性的讀取和修改:
1.通過 . 連接 屬性不可以改變,不能在運行時更改
2.通過object['xxx']; 屬性可以是變數,比如 object['xx'+a]; a可以是個變數,這樣屬性就不確定了,可以在運行中更改
3.查詢一個沒有的屬性會返回undefined
4.查詢一個對象的屬性,如果對象不存在,就會拋出一個錯誤。如果查詢某對象的屬性,不讓他報錯可以這樣:
var a=b&&b.c&&b.c.d;
屬性的刪除
1. delete只能斷開宿主與宿主對象的聯繫,而不會去操作屬性中的屬性,不能刪除通過變數聲明或函數聲明創建的全局全局對象屬性,成功返回true,失敗返回false
delete a.b//a不再擁有屬性b
delete a['b']//a不再擁有屬性b
屬性的檢測
1.in運算符,hasOwnProperty(),propertyIsEnumerable()
in左側屬性名,有側是對象如果對象的自有屬性或繼承屬性包含這個屬性就返回true,否則false
var a={x:1} a.hasOwnPreperty('x');//true
propertyIsEnumerable()是hasOwnPreperty()的增強版,只有屬性是可枚舉的,並且屬於這個對象,才返回true
2.最簡單的方法!==是否為undefined
屬性的枚舉
1.在代碼中給對象添加的所有屬性都是可枚舉的,在for/in中我們需要跳過一些屬性
for(p in o){
if(!o.hasOwnproperty(p)) continue ;//跳過繼承屬性
}
for(p in o){
if(typeof o[p]==="function") continue ;//跳過方法
}
2.在es5中多了兩個函數
Object.keys();//返回一個數組,這個數組由對象中可枚舉的自有屬性組成
Object.getOwnPropertyNames();//返回對象中所有自有屬性的名稱
屬性getter和setter (存取器屬性)
1.var 0={
a:1,//普通的數據屬性
//存取器屬性都是成對定義的函數
get b(){這裡是函數體},
set c(){這裡是函數體}
}
對象的三個屬性
1.原型屬性:
var p={x:1};//定義一個原型對象
var o=Object.create(p);使用這個原型創建一個對象
p.isPrototypeOf(0);//true,o繼承自p
Object.prototype.isPrototypeOf(o);//p繼承自Object.prototype
2.類屬性
3.可擴展性 通過把對象傳入Object.esExtensible()判斷對象是否是可擴展的
Object.prevenExtensions()將帶轉換的對象作為參數傳進去,就會變成不可擴展的,註意,轉換成就不能轉換回來了
Object.seal()不僅能夠把對象設為不可擴展,而且能把其自身的的所有自有屬性設為不可配置
isSealed()檢測對象是否封閉
Object.freeze() 凍結,不光不可配置,而且止咳可讀
Object.isFrozen() 檢查對象是否凍結
對象序列化
1:JSON.stringify();//轉換為JSON字元串
2::JSON.parse();//轉換為對象
對象方法:
1.toString();
2.toLocaleString();
3.toJSON();
4:valueOf();