常用的實例函數(shù)和靜態(tài)函數(shù)
引用數(shù)據(jù)類型,是通過 new 操作符來生成的,然而 new 在執(zhí)行的時候,會改變 this 的指向。
執(zhí)行 new 的時候,首先是創(chuàng)建一個空對象,把空對象的__proto__屬性指向構(gòu)造函數(shù)的 prototype 屬性,完成了將構(gòu)造函數(shù)的 this 指向新建的這個空對象。
Object 類型中,有這樣的幾個實例函數(shù):
-
hasOwnProperty(propertyName)函數(shù),判斷了一個屬性是不是實例自己定義的;但是它不會檢查原型鏈上的屬性。 -
propertyIsEnumerable(propertyName)函數(shù),判斷屬性是否是實例屬性并且該屬性是否可枚舉;
Object 類型的靜態(tài)函數(shù):
-
Object.create(),主要是用來創(chuàng)建并且返回一個指定原型和指定屬性的對象; -
Object.defineProperties()函數(shù),添加或者修改對象屬性的值,第一個參數(shù)是操作對象,第二個參數(shù)是添加或者修改的屬性信息; -
Object.getOwnPropertyNames()函數(shù),獲取對象的所有的屬性和函數(shù); -
Object.keys()函數(shù),獲取對象可枚舉的實例屬性;
Array 類型
###判斷一個數(shù)組是否為空的方法
-
一般使用的是 instanceof運算符,是在原型鏈上查找變量是否是某個類型的實例, 比如:
const str = [1,2];
console.log(str instanceof Array);// true
console.log(str instanceof Object);// true
這就導(dǎo)致我們不能精準(zhǔn)判斷一個變量的具體數(shù)據(jù)類型。
-
第二個方式使用 Array 的 isArray 方法,比如:
console.log(Array.isArray(arr);
,變量是數(shù)組就返回 true,法則返回 false。 -
通過判斷構(gòu)造函數(shù),判斷變量的構(gòu)造函數(shù)是 Array 類型,還是 Object 類型。因為一個對象是通過構(gòu)造函數(shù)來生成的。代碼如下:
const arr = [];
console.log(arr.constructor === Array)
每一個變量都會有一個__proto__屬性,表示隱式原型,proto 屬性指向了構(gòu)造函數(shù)的原型。比如:console.log(arr.__proto__ === arr.constructor.prototype);//true
引用數(shù)據(jù)類型都是繼承了 Object 類型,所以它們都含有了 toString 函數(shù),不同數(shù)據(jù)累心的 toString 的返回值是不一樣的,因此可以通過 toString 函數(shù)來判斷一個變量是數(shù)組還是對象。結(jié)果返回的是“[object Array]”或者"[object Object]"。
比如:
const obj = {}
const arr = []
console.log(Object.prototype.toString.call(obj)); //[object Object]
console.log(Object.prototype.toString.call(arr)) // [object Array]
console.log(Object.prototype.toString.call(908)) // [object Number]
console.log(Object.prototype.toString.call("7sd")) // [object String]
這一篇就記錄這些吧!