這裏介紹對象原生的各類方法。數組
Object
對象的原生方法有兩類:對象自己的方法與對象的實例方法。bash
所謂實例方法就是定義在Object
原型對象Object.prototype
上的方法,能夠被實例直接使用。函數
Object
自己就是一個函數,能夠用於將任意值轉化爲對象。spa
var obj = Object(1);
obj intanceof Object // true
複製代碼
若是Object
方法的參數是一個對象,那麼他老是返回該對象。prototype
Object
構造函數它不只能夠是一個轉換函數,還能夠看成構造函數使用。code
var obj = new Object();
複製代碼
注意,經過
var obj = new Object()
的寫法生成新對象,與字面量的寫法var obj = {}
是等價的。或者說,後者只是前者的一種簡便寫法。對象
var o1 = {a: 1};
var o2 = new Object(o1);
o1 === o2 // true
var obj = new Object(123);
obj instanceof Number // true
複製代碼
雖然用法類似,可是Object(value)
和new Object(value)
二者的語義是不一樣的,前者是將value
轉換成一個對象,後者是生成一個新對象,可是他的值是value
。繼承
Object
的靜態方法Object.keys()
, Object.getOwnPropertyNames()
二者都是遍歷對象的屬性。通常來講二者都是同樣,接收一個對象做爲參數,返回一個對象屬性名的數組。只有涉及不可枚舉屬性時,纔會有不同的結果。ip
var a = ['Hello', 'World'];
Object.keys(a) // ["0", "1"]
Object.getOwnPropertyNames(a) // ["0", "1", "length"]
複製代碼
對象屬性模型的相關方法原型鏈
Object.getOwnPropertyDescriptor()
:獲取某個屬性的描述對象Object.defineProperty()
:經過描述對象,定於某個屬性Object.defineProperties()
:經過描述對象,定義多個屬性控制對象狀態的方法
Object.preventExtensions()
:防止對象擴展。Object.isExtensible()
:判斷對象是否可擴展。Object.seal()
:禁止對象配置。Object.isSealed()
:判斷一個對象是否可配置。Object.freeze()
:凍結一個對象。Object.isFrozen()
:判斷一個對象是否被凍結。原型鏈相關方法
Object.create()
:該方法能夠指定原型對象和屬性,返回一個新的對象。Object.getPrototypeOf()
:獲取對象的Prototype對象。Object
的實例方法主要有如下六個:
Object.prototype.valueof()
:返回對象對應的值Object.prototype.toString()
:返回對象對應的字符串形式Object.prototype.toLocaleString()
:返回對象對應的本地字符串形式Object.prototype.hasOwnProperty()
:判斷某個屬性是否爲當前對象自身的屬性,仍是繼承自原型對象的屬性。Object.prototype.isPrototypeOf()
:判斷當前對象是否爲另外一個對象的原型Object.prototype.propertyIsEnumerable()
:判斷某個屬性是否可枚舉Object.prototype.toString
不一樣數據類型的Object.prototype.toString方法返回值以下。
數值:返回[object Number]
。
字符串:返回[object String]
。
布爾值:返回[object Boolean]
。
undefined:返回[object Undefined]
。
null:返回[object Null]
。
數組:返回[object Array]
。
arguments 對象:返回[object Arguments]
。
函數:返回[object Function]
。
Error 對象:返回[object Error]
。
Date 對象:返回[object Date]
。
RegExp 對象:返回[object RegExp]
。
其餘對象:返回[object Object]
。