Object对象
原文地址:https://wangdoc.com/javascript/
JavaScript原生提供Object對(duì)象。JavaScript的所有其他對(duì)象都繼承自Object對(duì)象,即都是Object的實(shí)例。Object對(duì)象的原生方法分為兩類:Object本身的方法與Object的實(shí)例方法。
Object對(duì)象本身的方法
所謂本身的方法就是直接定義在Object對(duì)象的方法。
上面代碼中,print就是直接定義在Object對(duì)象上。
Object的實(shí)例方法
所謂實(shí)例方法就是定義在Object原型對(duì)象Object.prototype上的方法。它可以被Object實(shí)例直接使用。
上面代碼中,Object.prototype定義了一個(gè)print方法,然后生成一個(gè)Object的實(shí)例obj。obj直接繼承了Object.prototype的屬性和方法,可以直接使用obj.print調(diào)用print方法。也就是說,obj對(duì)象的print方法實(shí)質(zhì)上就是調(diào)用Object.prototype.print方法。
Object()
Object本身是一個(gè)函數(shù),可以當(dāng)作工具方法使用,將任意值轉(zhuǎn)為對(duì)象。這個(gè)方法常用于保證某個(gè)值一定是對(duì)象。
如果參數(shù)為空(或者為undefined和null),Object()返回一個(gè)空對(duì)象。
instanceof運(yùn)算符用來驗(yàn)證,一個(gè)對(duì)象是否為指定的構(gòu)造函數(shù)的實(shí)例。obj instanceof Object返回true,就表示obj對(duì)象是Object的實(shí)例。
上面代碼中,Object函數(shù)的參數(shù)是各種原始類型的值,轉(zhuǎn)換成對(duì)象就是原始類型值對(duì)應(yīng)的包裝對(duì)象。
如果Object方法的參數(shù)是一個(gè)對(duì)象,它總是返回該對(duì)象,即不用轉(zhuǎn)換。
利用這一點(diǎn),可以寫一個(gè)判斷變量是否為對(duì)象的函數(shù)。
function isObject(value) {return value === Object(value); }Object構(gòu)造函數(shù)
Object不僅可以當(dāng)作工具函數(shù)使用,還可以當(dāng)作構(gòu)造函數(shù)使用,即前面可以使用new命令。Object構(gòu)造函數(shù)的首要用途是直接用它來生成新對(duì)象。
Object構(gòu)造函數(shù)的用法與工具方法很相似,幾乎一模一樣。使用時(shí),可以接受一個(gè)參數(shù),如果該參數(shù)是一個(gè)對(duì)象,則直接返回這個(gè)對(duì)象;如果是一個(gè)原始類型的值,則返回該值對(duì)應(yīng)的包裝對(duì)象。
雖然很相似,但是Object(value)與new Object(value)兩者的語義是不同的,Object(value)表示將value轉(zhuǎn)成一個(gè)對(duì)象,new Object(value)則表示新生成一個(gè)對(duì)象,它的值是value。
Object的靜態(tài)方法
所謂靜態(tài)方法,是指部署在Object(value)對(duì)象自身的方法。
Object.keys(),Object.getOwnPropertyNames()
Object.keys方法和Object.getOwnPropertyNames方法都用來遍歷對(duì)象的屬性。Object.keys方法的參數(shù)是一個(gè)對(duì)象,返回一個(gè)數(shù)組。該數(shù)組的成員都是該對(duì)象自身的(而不是繼承的)所有屬性名。
Object.getOwnPropertyNames方法和Object.keys類似,也是接受一個(gè)對(duì)象作為參數(shù),返回一個(gè)數(shù)組,包含了該對(duì)象自身的所有屬性名。
對(duì)于一般的對(duì)象來說Object.keys()和Object.getOwnPropertyNames()返回的結(jié)果都一樣。只有涉及不可枚舉屬性是,才會(huì)有不一樣的結(jié)果。Object.keys方法只返回可枚舉的屬性,Object.getOwnPropertyNames方法還返回不可枚舉的屬性名。
其他方法
除了上面提到的兩個(gè)方法,Object還有不少其他靜態(tài)方法。
(1)對(duì)象屬性模型的相關(guān)方法
- Object.getOwnPropertyDescriptor():獲取某個(gè)屬性的描述對(duì)象。
- Object.defineProperty():通過描述對(duì)象,定義某個(gè)屬性。
- Object.defineProperties():通過描述對(duì)象,定義多個(gè)屬性。
(2)控制對(duì)象狀態(tài)的方法 - Object.preventExtensions():防止對(duì)象擴(kuò)展。
- Object.isExtensible():判斷對(duì)象是否可擴(kuò)展。
- Object.seal():禁止對(duì)象配置。
- Object.isSealed():判斷一個(gè)對(duì)象是否可配置。
- Object.freeze():凍結(jié)一個(gè)對(duì)象。
- Object.isFrozen():判斷一個(gè)對(duì)象是否被凍結(jié)。
(3)原型鏈相關(guān)方法 - Object.create():該方法可以指定原型對(duì)象和屬性,返回一個(gè)新的對(duì)象。
Object.getPropertyOf():獲取對(duì)象的Prototype對(duì)象。
Object的實(shí)例方法
除了靜態(tài)方法,還有不少方法定義在Object.prototype對(duì)象。它們稱為實(shí)例方法,所有Object的實(shí)例對(duì)象都繼承了這些方法。
Object實(shí)例對(duì)象的方法,主要有以下六個(gè)。- Object.prototype.valueOf():返回當(dāng)前對(duì)象對(duì)應(yīng)的值。
- Object.prototype.toString():返回當(dāng)前對(duì)象對(duì)應(yīng)的字符串形式。
- Object.prototype.toLocaleString():返回當(dāng)前對(duì)象對(duì)應(yīng)的本地字符串形式。
- Object.prototype.hasOwnProperty():判斷某個(gè)屬性是否為當(dāng)前對(duì)象自身的屬性,還是繼承自原型對(duì)象的屬性。
- Object.prototype.isPrototypeOf():判斷當(dāng)前對(duì)象是否為另一個(gè)對(duì)象的原型。
Object.prototype.propertyIsEnumerable():判斷某個(gè)屬性是否可枚舉。
Object.prototype.valueOf()
valueOf方法的作用是返回一個(gè)對(duì)象的值,默認(rèn)情況下返回對(duì)象本身。
Object.prototype.toString()
toString方法的作用是返回一個(gè)對(duì)象的字符串形式,默認(rèn)情況下返回類型字符串。
上面代碼會(huì)返回字符串[object Object],該字符串說明對(duì)象的類型。
字符串[object Object]本身沒有太大的用處,但是通過自定義toString方法,可以讓對(duì)象在自動(dòng)類型轉(zhuǎn)換是,得到想要的字符串形式。
數(shù)組、字符串、函數(shù)、Date對(duì)象分別部署了自定義的toString方法,覆蓋了Object.prototype.toString方法。
toString()的應(yīng)用:判斷數(shù)據(jù)類型
Object.prototype.toString方法返回對(duì)象的類型字符串,因此可以用來判斷一個(gè)值得類型。上面空對(duì)象調(diào)用toString返回的字符串object Object,其中第二個(gè)Object表示該值的構(gòu)造函數(shù)。
由于實(shí)例對(duì)象可能會(huì)自定義toString方法,覆蓋掉Object.prototype.toString方法,所以為了得到類型字符串,最好直接使用Object.prototype.toString方法。通過函數(shù)的call方法調(diào)用。
- 數(shù)值:返回[object Number]。
- 字符串:返回[object String]。
...
利用這個(gè)特性,可以寫出一個(gè)比typeof運(yùn)算符更準(zhǔn)確的類型判斷函數(shù)。
Object.prototype.toLocaleString()
Object.prototype.toLocaleString方法與toString返回結(jié)果相同,也是返回一個(gè)值得字符串形式。這個(gè)方法的主要作用是留出一個(gè)接口,讓各種不同的對(duì)象實(shí)現(xiàn)自己版本的toLocaleString,用來返回針對(duì)某些地域的特定的值。
目前主要有三個(gè)對(duì)象自定義了toLocaleString方法。
- Array.prototype.toLocaleString()
- Number.prototype.toLocaleString()
Date.prototype.toLocaleString()
舉例來說,日期的實(shí)例對(duì)象的toString和toLocaleString返回值就不一樣,而且toLocaleString的返回值跟用戶設(shè)定的所在地域有關(guān)。Object.prototype.hasOwnProperty()
Object.prototype.hasOwnProperty方法接受一個(gè)字符串作為參數(shù),返回一個(gè)布爾值,表示該實(shí)例對(duì)象自身是否有該屬性。
上面代碼中,對(duì)象obj自身具有p屬性。toString屬性是繼承來的。
轉(zhuǎn)載于:https://www.cnblogs.com/chris-jichen/p/10043589.html
總結(jié)
- 上一篇: CF765F Souvenirs 解题报
- 下一篇: swat模型_安利一个运用SWAT模型模