2017/5 JavaScript基礎3---包裝對象、類型檢測

1、number string boolean 都有對應的包裝類型

能夠看到 str是一個基本類型,字符串類型,strObj是一個 對象類型,是String類型對應的包裝類windows

在最後一行打 clear();清除數組

str是一個基本類型,他沒有屬性和方法,獲得str的長度str.length 能夠獲得值,這是爲何。app

給 str 添加一個屬性 t也是能夠的  str.t = 10;但賦值以後再看t 爲undefined函數

JavaScript中有一個隱藏機制,當把一個基本類型,嘗試爲一個對象來使用時,好比在求長度,或添加屬性時,會吧基本類型轉化爲對應的包裝類型對象,至關於new String()一個一樣的值,當完成訪問或設置後,這個臨時對象,會被銷燬。spa

數字 number ,boolean都相似。prototype

2、類型檢測

1.類型檢測分類

  • typeof
  • instanceof
  • Object.prototype.toString
  • constructor
  • duck type

1)typeof

typeof運算符會返回一個字符串,適合函數對象和基本類型的判斷對象

  • typeof 100                "number"
  • typeod true              "boolean"
  • typeof function         "function"
  • typeof (undefined)    "undefined"
  • typeof new Object()  "object"
  • typeof [ 1,2 ]             "object"              //數組也是對象
  • typeof NaN               "number           //NAN not  number ,是number類型的一個特殊值
  • typeof null                "object"

爲何 typeof null ==="object"  歷史緣由記住就好繼承

二、判斷對象類型

1)instanceof :基於原型鏈判斷

obj instanceof Object  : 左操做數必須爲對象,若是爲基本類型直接返回false,。右操做數,必須爲函數對象,函數構造器,不然會拋出異常。ip

2)判斷原理

判斷左操做數的 原型鏈 上 ,是否有 右邊構造函數的 prototype 屬性。原型鏈

[1,2] instanceof Array === true

new Object() instanceof Array ===false

注意 不一樣的 window 或 iframe 間的對象檢測是不可使用instanceof的。

3)Object.Prototype.toString

  • Object.prototype.toString.apply ( [ ] ) === "[ object Array ]"  傳入一個數組,會返回一個[ object Array ]
  • .apply(function(){}):傳入一個對象 ,返回  "[ object Function]"
  • 傳入 null  返回 [  object null ]
  • 穿入 undefined 返回 object undefined

4) constructor

任何一個對象都有一個 constructor屬性,繼承自原型,constructor 會指向構造這個對象的構造器、構造函數。constructor是能夠改寫的因此使用時當心。

三、類型檢測總結

typeof

適合基本類型及Function檢測,遇到null失效返回 object,用 === 方式判斷

Object.Prototype.toString

適合內置對象和基元類型,數組函數、在 IE 678  null undefined返回 [ object object ]。

instanceof

適合自定義對象,也能夠用來檢測原生對象,在不一樣 iframe 和 windows間檢測時失效

相關文章
相關標籤/搜索