學習js筆記(第4章-對象)

對象概述

對象包含一系列的屬性,這些屬性是無序的,每一個屬性都有一個字符串key和對應的value後端

對象屬性描述符」(PropertyDescriptor),如下簡稱「屬性標籤」:

對象中的每一個屬性有不少屬性標籤,提供每一個屬性的可訪問權限,好比:getset方法,是否可選,可刪除,可枚舉等函數

對象標籤:

對象的class標籤,表示該對象所屬種類,extensible標籤,表示該對象是否容許增長新的屬性prototype

對象建立

對象字面量

原型指向 Object.prototype
**不管是用數字1,仍是字符串1,{}空對象,或者帶有x屬性的對象 做爲key,js都會
調用toString,轉換成字符串

3d

new構造器(原型鏈)

object.create()

以參數做爲原型
code

對象屬性的操做

屬性的讀寫

obj.x==obj["y"];

遍歷屬性的兩種方法


屬性讀寫-異常

  1. 報錯的緣由是:此時obj.y未定義,因此不能去定義obj.y.z

    正確方法:

    或者:
  2. 屬性刪除

    getOwnPropertyDescriptor()獲取對象屬性的全部標籤
  3. var定義的局部,全局變量,函數聲明不能被刪除 ,隱式建立局部變量能夠被刪除,在eval定義的變量也能夠被刪除


屬性的檢測

  1. in注意原型鏈問題
  2. hasOwnProperty('toString');
  3. obj.propertyIsEnumerable('toString');//返回false,該方法判斷屬性是否能夠枚舉
  4. 用 其餘方式建立的屬性 ,enumerable默認爲true,可是Object.defineProperty建立的變量默認爲false
  5. !=!==的區別
  6. 屬性枚舉的方法

另外一種屬性讀寫方法-getter && setter方法的實際應用

語法:
get +屬性名(){},//與其餘屬性之間用","隔開 set +屬性名(val){}

val=+val一元操做符,將val變成一個數字
對象

get/set與原型鏈

當對象obj沒有z屬性時,在原型鏈上查找有定義get``set方法時,obj.z=10賦值不能成功,賦值時會用原型上的get``set方法

若想要給當前對象添加z屬性時,應使用Object.defineProperty()

當對象obj沒有z屬性時,在原型鏈上查找屬性x的writable=falseobj.z=10賦值也不能成功,若想要給當前對象添加z屬性時,應使用Object.defineProperty()
blog

屬性級的權限設置

屬性標籤的設置

  • 定義一個屬性Object.defineProperty
  • Object.keys只保存enumerable:true的屬性值
  • 定義多個屬性Object.definePropertys
  • 更復雜的狀況
  • 總結
    ip

    對象描述符

    原型標籤_proto_

    實現原型鏈,Object.protoTypeOf獲取對象的原型原型鏈

    class標籤

    一般用Object.prototype.toString方式獲取,Object.prototype.toString方法會將參數變爲對象再作處理
    字符串

    extensible標籤

    Object.isExtensible([obj]) 檢驗對象是否能夠擴展
    Object.preventExtensions([obj]) 阻止對象被擴展
    Object.seal([obj]) 使對象的屬性不能被配置 即從configurable的屬性標籤設定爲false
    Object.isSealed([obj])判斷對象是否爲不可配置
    Object.freeze([obj])將對象的configurable 屬性標籤以及writable屬性標籤設定爲false
    Object.isFreozen([obj])判斷對象是否被凍結,能夠把整個原型鏈全都凍結

    序列化

  1. JSON.stringify(obj),若是obj = {a:undefined,b:1},那麼序列化以後的對象裏面不包含a屬性
  2. 當你屬性的值是NaN或者Infinity時,序列化的結果是null;當你的屬性值是new Date(),序列化的結果是UTC的時間格式
  3. 後端返回JSON數據,則用JSON.parse來解析成爲js的對象;合法的JSON的屬性必須用雙引號引發來

    序列化自定義

    其餘對象方法

    自定義對象的toString方法,轉化成字符串時使用

    類型轉換時,自動調用toString方法或者valueOf方法

    自定義對象的valueOf方法,轉化成基本類型時自動調用的函數

    toStringvalueOf同時存在,先尋找valueOf,若是不存在或不合法的值(爲對象),則再尋找toString

    總結

相關文章
相關標籤/搜索