JavaScript對象可以做什么?一般大家對JavaScript對象的了解可能停留在概念的層面上,而對于JavaScript對象使用方法了解相對較少。今天就跟大家聊聊JavaScript對象使用方法。

除了普通的對象屬性賦值和遍歷之外,我們還可以使用 JavaScript 對象執(zhí)行許多其他操作。在本文中,我們將了解如何使用它們,包括訪問內(nèi)部屬性、操作屬性描述符和繼承只讀屬性。
1. 訪問內(nèi)部屬性
JavaScript 對象無法以常規(guī)方式訪問的內(nèi)部屬性。內(nèi)部屬性名由雙方括號[[]]包圍,在創(chuàng)建對象時可用。
內(nèi)部屬性不能動態(tài)地添加到現(xiàn)有對象。
內(nèi)部屬性可以在某些內(nèi)置 JavaScript 對象中使用,它們存儲ECMAScript規(guī)范指定的內(nèi)部狀態(tài)。
有兩種內(nèi)部屬性,一種操作對象的方法,另一種是存儲數(shù)據(jù)的方法。例如:
[[Prototype]] — 對象的原型,可以為null或?qū)ο?/p>
[[Extensible]] — 表示是否允許在對象中動態(tài)添加新的屬性
[[PrivateFieldValues]] — 用于管理私有類字段
2. 屬性描述符對象
數(shù)據(jù)屬性包含了一個數(shù)據(jù)值的位置,在這個位置可以讀取和寫入值。也就是說,數(shù)據(jù)屬性可以通過 對象.屬性 訪問,就是我么平常接觸的用戶賦什么值,它們就返回什么,不會做額外的事情。
數(shù)據(jù)屬性有4個描述其行為的特性(為了表示內(nèi)部值,把屬性放在兩對方括號中),稱為描述符對象。
value 描述符是屬性的數(shù)據(jù)值,例如,我們有以下對象 :
let foo = {
  a: 1}那么,a 的value屬性描述符為1。
writable是指該屬性的值是否可以更改。 默認(rèn)值為true,表示屬性是可寫的。 但是,我們可以通過多種方式將其設(shè)置為不可寫。
configurable 的意思是可以刪除對象的屬性還是可以更改其屬性描述符。 默認(rèn)值為true,這意味著它是可配置的。
enumerable 意味著它可以被for ... in循環(huán)遍歷。 默認(rèn)值為true,說明能通過for-in循環(huán)返回屬性
將屬性鍵添加到返回的數(shù)組之前,Object.keys方法還檢查enumerable 描述符。 但是,Reflect.ownKeys方法不會檢查此屬性描述符,而是返回所有自己的屬性鍵。
Prototype描述符有其他方法,get和set分別用于獲取和設(shè)置值。
在創(chuàng)建新對象, 我們可以使用Object.defineProperty方法設(shè)置的描述符,如下所示:
let foo = {
  a: 1}Object.defineProperty(foo, 'b', {
  value: 2,
  writable: true,
  enumerable: true,
  configurable: true,});這樣得到foo的新值是{a: 1, b: 2}。
我們還可以使用defineProperty更改現(xiàn)有屬性的描述符。 例如:
let foo = {
  a: 1}Object.defineProperty(foo, 'a', {
  value: 2,
  writable: false,
  enumerable: true,
  configurable: true,});這樣當(dāng)我們嘗試給 foo.a 賦值時,如:
foo.a = 2;
如果關(guān)閉了嚴(yán)格模式,瀏覽器將忽略,否則將拋出一個錯誤,因為我們將 writable 設(shè)置為 false, 表示該屬性不可寫。
我們還可以使用defineProperty將屬性轉(zhuǎn)換為getter,如下所示:
'use strict'let foo = {  a: 1}Object.defineProperty(foo, 'b', {  get() {    return 1;
  }
})當(dāng)我們這樣寫的時候:
foo.b = 2;
因為b屬性是getter屬性,所以當(dāng)使用嚴(yán)格模式時,我們會得到一個錯誤:Getter 屬性不能重新賦值。
3.無法分配繼承的只讀屬性
繼承的只讀屬性不能再賦值。這是有道理的,因為我們這樣設(shè)置它,它是繼承的,所以它應(yīng)該傳播到繼承屬性的對象。
我們可以使用Object.create創(chuàng)建一個從原型對象繼承屬性的對象,如下所示:
const proto = Object.defineProperties({}, {
  a: {
    value: 1,
    writable: false
  }})const foo = Object.create(proto)在上面的代碼中,我們將proto.a的 writable 描述符設(shè)置為false,因此我們無法為其分配其他值。
如果我們這樣寫:
foo.a = 2;
在嚴(yán)格模式下,我們會收到錯誤消息。
總結(jié)
我們可以用 JavaScript 對象做很多我們可能不知道的事情。
首先,某些 JavaScript 對象(例如內(nèi)置瀏覽器對象)具有內(nèi)部屬性,這些屬性由雙方括號包圍,它們具有內(nèi)部狀態(tài),對象創(chuàng)建無法動態(tài)添加。
JavaScript對象屬性還具有屬性描述符,該屬性描述符使我們可以控制其值以及可以設(shè)置它們的值,還是可以更改其屬性描述符等。
我們可以使用defineProperty更改屬性的屬性描述符,它還用于添加新屬性及其屬性描述符。
最后,繼承的只讀屬性保持只讀狀態(tài),這是有道理的,因為它是從父原型對象繼承而來的。
看完上述內(nèi)容,你們對JavaScript對象的應(yīng)用有進一步的了解嗎?如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計公司行業(yè)資訊頻道,感謝各位的閱讀!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
                標(biāo)題名稱:JavaScript對象使用方法-創(chuàng)新互聯(lián)
                
                轉(zhuǎn)載來于:http://chinadenli.net/article20/gcjco.html
            
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、定制網(wǎng)站、品牌網(wǎng)站設(shè)計、Google、網(wǎng)站設(shè)計公司、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容