【冰山白皮書】JS中的物件

冰山工作室發表於2019-04-09

關於我們

QQ答疑交流群:
600633658

我們的連結: 知乎 掘金 今日頭條 新浪微博 前端網 思否 簡書 B站

什麼是物件

  • 是由屬性以及屬性所對應的值組成的合集,是沒有順序的
  • 除6種原始資料型別之外,所有的資料都是物件

物件和原始型別區別

  • 物件有屬性,屬性所對應的值可以是原始資料型別,也可以是方法,還可以是物件
  • 物件有方法,方法是一種特殊的屬性,對應的值是一個函式,用於實現某種功能,由此可見函式也是物件
    • (回顧為什麼String Number Boolean也可以使用方法或者呼叫屬性)
  • 物件是可變的,改變的本質是物件屬性發生了變化

物件的分類

內部物件

  • 錯誤物件:Error
  • 本地物件:Boolean String Number Array Date Function Object RegExp
  • 內建物件:直譯器內建,不需要使用new global Math Json

宿主物件
執行環境提供的物件:window document

自定義物件
開發者自己建立的物件

原始型別轉換到物件

  • Object(true)----{[[PrimitiveValue]]: true}
  • Object(123)----{[[PrimitiveValue]]: 123}
  • Object("abc")——{0:'a',1:'b',2:'c',length:3,[[PrimitiveValue]]: true}
  • Object(null)----{}
  • Object(undefined)----{}

物件上的兩個基礎方法

toString

  • 將當前物件用字串表示出來。
  • 所有的內部物件和宿主物件都重寫了toString方法
    • Boolean String Number直接返回對應的字串
    • Array:為陣列的每一項呼叫toString方法並將結果用逗號連線
    • Date:返回一個由日期和時間組成的字串(不同的環境下結果不一樣)
    • Function:返回函式體內部的原始碼
    • Object:返回[object object]
    • RegExp:返回正規表示式的直接量字串(帶轉義符)
  • 可以接受一個2~36的數字作為引數,表示需要轉換的內容是幾進位制的

valueOf

  • 有原始值返回原始值
  • 沒有原始值返回本身
  • Date物件返回距離1970年1月1日0點的毫秒數

物件轉換到原始型別

  • Boolean:所有的物件轉換到布林型別都為true.(JS中只有6個值能轉成false)
  • String:先呼叫toString方法,再呼叫valueOf方法
  • Number:先呼叫valueOf方法,再呼叫toString方法

如何建立一個物件

1.使用字元字面量的方式(最簡單)

var o = {age:123}
複製程式碼

注意:屬性名中如果有空格,連字元,關鍵字或者保留字的時候必須使用引號(在ES5中保留字可以不使用引號,但是不建議這麼做)最後一個逗號需要刪除,否則在IE7及以下的瀏覽器中會報錯

2.使用new操作符(最標準)

var o = new Object()

var s = new String(‘abcd’)

var n = new Number(123)

var a = new Array(3)

var d = new Date(2017/04/15)
複製程式碼

var a=new Array 沒有引數的時候可以不寫括號

3.使用ES5中的新方法(最精確,最麻煩)

Object.creat()
複製程式碼

接受兩個引數:1要繼承的原型,2物件的詳細描述

物件的屬性的獲取

兩種寫法:點或者方括號,點後面放屬性名稱,括號裡面放表示式

屬性獲取過程詳解

當JS的直譯器在程式碼中遇到“.”或者 “[ ]”的時候將進行以下操作

  • 對“.”或者 “[ ]”前面的表示式進行計算並獲取結果
  • 如果是undefined或null直接報錯
  • 如果不是物件就轉換成對應的物件
  • 如果是“.”,則查詢對應的屬性
  • 如果是 “[ ]”,先計算“[ ]”裡面的表示式,再將結果轉換為字串,並查詢對應的屬性
  • 如果該屬性存在則返回對應的值
  • 如果該屬性不存在則返回undefined

【冰山白皮書】JS中的物件

相關文章