JavaScript原生提供一個Object對象,所有其他對象都繼承自這個對象。
object.keys()與object.getOwnPropertyNames()
用來遍歷對象的屬性。他們的參數都是一個對象,都返回一個數組,該數組的成員都是對象自身的所有屬性名。區別在于object.getOwnPropertyNames()還返回不可枚舉的屬性名,如length
(1) 對象屬性模型的相關方法
Object.getOwnPropertyDescriptor():獲取某個屬性的attributes對象。
Object.defineProperty():通過attributes對象,定義某個屬性。
var o = {};
Object.defineProperty (o,'p',{
value:123,
get:function() { return456;}
});
Object.defineProperties():通過attributes對象,定義多個屬性。
var o = Object.defineProperties ( { }, {
p1:{value:123,enumerable:true},
p2:{value:'abc',enumerable:true},
p3:{ get:function(){returnthis.p1+this.p2},
enumerable:true,
configurable:true}
});
o.p1// 123
o.p2// "abc"
o.p3// "123abc"
Object.getOwnPropertyNames():返回直接定義在某個對象上面的全部屬性的名稱。
var 0 = Object.defineProperties({},{
p1:{ value:1,enumerable:true };
p2:{ value:2,enumerable:false }
});
Object.getOwnPropertyNames(o)
// ["p1","p2"] 返回直接定義在該對象上的全部屬性的名稱
可配置性(configurable)
可配置性(configurable)決定了是否可以修改屬性的描述對象。也就是說,當configurable為false的時候,value、writable、enumerable和configurable都不能被修改了。
可寫性(writable)決定了屬性的值(value)是否可以被改變。
而不使用var命令聲明變量時(或者使用屬性賦值的方式聲明變量),變量的可配置性為true。
如果一個變量是使用var命令生成的,就無法用delete命令刪除。也就是說,delete只能刪除對象的屬性。
存取器(accessor)
其中,存值函數稱為setter,使用set命令;取值函數稱為getter,使用get命令。
(2) 控制對象狀態的方法
Object.preventExtensions():防止對象擴展。使一個對象無法再添加新的屬性;可以用delete命令刪除現有屬性。
Object.isExtensible():判斷對象是否可擴展。(返回true,表示可以添加新屬性)
Object.seal():禁止對象配置。
Object.isSealed():判斷一個對象是否可配置
Object.freeze():凍結一個對象。
Object.isFrozen():判斷一個對象是否被凍結。
(3) 原型鏈相關方法
Object.create():生成一個新對象,并該對象的原型。
Object.getPrototypeOf():獲取對象的prototype對象
Object實例對象的方法:
valueOf():返回當前對象對應的值;
toString():返回當前對象對應的本地字符串形式;
toLocalString():
hasOwnProperty():
isPrototypeOf():
propertylsEnumerable():
toString()判斷數據類型: