由對象的屬性說到幾個容易混淆的js內(nèi)建方法

前言 關于屬性

屬性類型:

對象有兩種屬性類型:String類型屬性 與 Symbol類型屬性。它們通常被稱為屬性與符號屬性。

屬性描述符:

對象的每個屬性都有一個屬性描述符。屬性描述符分兩種:數(shù)據(jù)描述符訪問器描述符。

  • 描述符也是一個對象
  • 描述符必須是這兩種形式之一,不能同時是兩者
  • 對象添加屬性時,新屬性默認擁有一個數(shù)據(jù)描述符,且configurable、enumerable、writable都為true

兩種描述符共有的屬性:

  • configurable
  • enumerable 影響for...in Object.keys() Object.entries() Object.assign()

數(shù)據(jù)描述符特有的屬性:

  • value
  • writable

訪問器描述符特有的屬性:

  • get
  • set

詳見Object.defineProperty()方法

屬性的劃分

  • 屬性 / 符號屬性
  • 自身屬性 / 原型鏈上的屬性
  • 是否可枚舉 - enumerable
  • 是否可寫 - writable
  • 是否可配置 - configurable

與屬性相關的內(nèi)建方法

for...in

  • 以任意順序遍歷一個對象的可枚舉屬性
  • 循環(huán)將遍歷對象自身的所有可枚舉屬性,以及原型鏈上的可枚舉屬性(更接近原型鏈中對象的屬性覆蓋原型屬性)
  • 不包括Symbol屬性
  • 一個在被訪問之前已經(jīng)被刪除的屬性將不會在之后被訪問;在迭代進行時被添加到對象的屬性,可能在之后的迭代被訪問,也可能被忽略
  • 不應被用于迭代一個 Array,應用for...offorEach

Object.getOwnPropertyNames()

  • 返回一個給定對象自身的所有String屬性名的字符串數(shù)組
  • 不包括Symbol屬性
  • 包括可枚舉與不可枚舉

Object.getOwnPropertySymbols()

  • 返回一個給定對象自身的所有 Symbol 屬性的Symbol數(shù)組
  • 包括可枚舉與不可枚舉

Object.keys()

  • 返回一個由一個給定對象的自身、可枚舉屬性組成的數(shù)組
  • 不包括Symbol屬性

Object.assign()

  • 拷貝源對象自身并且可枚舉的屬性到目標對象
  • 會拷貝對象自身的Symbol屬性
  • 對復制源,只會調用其getter,拷貝它的值,而不會復制getter。也不會復制屬性的定義,如果要復制定義,應使用Object.getOwnPropertyDescriptor()Object.defineProperty()
  • 會跳過那些值為nullundefined的源對象

Object.entries()

  • 返回一個給定對象自身可枚舉屬性的鍵值對數(shù)組
  • 不包括Symbol屬性

Object.isExtensible()

Object.preventExtensions()

對象不可擴展:

  • 永遠不能再添加新的屬性
  • __proto__屬性的值不可被修改

Object.isSealed()

Object.seal()

對象密封:

  • 不可擴展
  • configurable= false (不可修改屬性的描述或刪除屬性)
  • 可寫性描述(writable)為可寫的屬性的值仍然可以被修改
  • 不會影響從原型鏈上繼承的屬性

Object.isFrozen()

Object.freeze()

對象凍結

  • 不可擴展
  • 密封
  • writable=false
  • 如果一個屬性的值是個對象,則這個對象中的屬性是可以修改的,除非它也是個凍結對象
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 官方中文版原文鏈接 感謝社區(qū)中各位的大力支持,譯者再次奉上一點點福利:阿里云產(chǎn)品券,享受所有官網(wǎng)優(yōu)惠,并抽取幸運大...
    HetfieldJoe閱讀 2,675評論 9 22
  • 概述 JavaScript提供了一個內(nèi)部數(shù)據(jù)結構,用來描述一個對象的屬性的行為,控制它的行為。這被稱為“屬性描述對...
    zjh111閱讀 781評論 0 0
  • 概述 JavaScript提供了一個內(nèi)部數(shù)據(jù)結構,用來描述一個對象的屬性的行為,控制它的行為。這被稱為“屬性描述對...
    許先生__閱讀 562評論 0 1
  • 3.1 語法 對象的文字語法: 構造形式: 3.2 類型 在 JavaScript 中一共有六種主要類型:stri...
    One_Hund閱讀 382評論 0 0
  • 函數(shù)和對象 1、函數(shù) 1.1 函數(shù)概述 函數(shù)對于任何一門語言來說都是核心的概念。通過函數(shù)可以封裝任意多條語句,而且...
    道無虛閱讀 4,943評論 0 5

友情鏈接更多精彩內(nèi)容