JavaScript 原生提供 Object 型別物件,其他所有物件都繼承 Object,都是 Object 的範例。Object 原生方法分成兩類:Object 原型方法和 Object 靜態函數。
-
Object 原型方法定義在 Object.prototype 物件上,所有 Object 範例物件都會繼承這些方法。
-
Object 靜態函數就是定義在 Object 物件上的方法,通過 Object 直接呼叫,不需要範例繼承。
本節只介紹 Object 靜態函數,Object 原型方法會在後面幾節中詳細介紹,分別為:
-
JS toString()
-
JS valueOf()
-
JS hasOwnProperty()
-
JS propertyIsEnumerable()
-
JS isPrototypeOf()
物件包裝函數
Object() 也是一個函數,它可以將任意值轉為物件。如果引數為空,或者為 undefined 和 null,Object() 將返回一個空物件。例如:
var obj = Object();
//等同於
var obj = Object(undefined);
var obj = Object(null);
範例
如果引數為陣列、物件、函數,則返回原物件,不進行轉換。根據這個特性,可以設計一個型別檢測函數,專門檢測一個值是否為參照型物件。
function isObject (value) {
return value === Object (value);
}
console.log(isObject([])); //true
console.log(isObject(true)); //false
物件建構函式
Object() 不僅可以當做工具函數使用,還可以當作建構函式使用。如果使用 new 命令呼叫 Object() 函數,將建立一個範例物件。例如,下面程式碼將建立一個新的範例物件。
var obj = new Object();
靜態函數
Object 物件包含很多靜態函數,簡單總結如下:
Object.keys:以陣列形式返回引數物件包含的可列舉的私有屬性。
Object.getOwnPropertyNames:以陣列形式返回引數物件包含的私有屬性名。
Object.getOwnPropertyDescriptor():獲取某個屬性的描述物件。
Object.defineProperty():通過描述物件,定義某個屬性。
Object.defineProperties():通過描述物件,定義多個屬性。
Object.preventExtensions():防止物件擴充套件。
Object.isExtensible():判斷物件是否可延伸。
Object.seal():禁止物件設定。
Object.isSealed():判斷一個物件是否可設定
Object.freeze():凍結一個物件。
Object.isFrozen():判斷一個物件是否被凍結。
Object.create():返回一個新的物件,並指定原型物件和屬性。
Object.getPrototypeOf():獲取物件的 Prototype 物件。