總結JavaScript——數據類型

JavaScript六種數據類型

js的弱類型特性

var num =32;
num = "this is a string";

在這個表達式裏,有如下結果:

 32+32     // 64
"32" +32   // "3232"
"32"-32    // 0

我們將一些比較基礎的js數據類型稱爲“原始類型”:

  • number
  • string
  • boolean
  • null
  • undefined

剩下的一種叫“對象類型”:

  • object [如Function、Array、Date…]

JavaScript隱式轉換

 //這裏+可以看作是字符串拼接
var x=' The answer is ' + 42;          
var y =42 + 'is the answer' ;
// 這裏的+ -看作是加減法運算符
"37" - 7 // 30
"37" + 7 //37

巧用+/-規則轉換類型,實際上是根據不同的類型做不同的操作。

JavaScript中的運算符有很多,比如:

  • “1.23” == 1.23
  • 0 == false
  • num == undefined
  • new Object() == new Object()
  • [1,2] == [1,2]

搞清楚這個邏輯,對JavaScript的入門也很重要。

我們來看看嚴格等於的邏輯:a===b

嚴格等於顧名思義,首先判斷等號兩邊的類型

  • 如果類型不同,返回false,不需要進行下去了
  • 如果類型相同:嘗試類型轉換和比較。如,null == undefined相等,number == string 轉number,boolean == ? 轉number,object == number | string 嘗試對象轉爲基本類型

JavaScript包裝對象

var srt = "string"; // str爲基本類型
var srtObj = new String ("string") // strObj爲對象類型

JavaScript中有一個比較隱藏的機制:當把一個基本類型嘗試以對象的方式去使用的時候,JavaScript會將這個基本類型轉化爲包裝對象,完成這個過程,這個臨時對象就會被銷燬掉,所以下面的代碼中會返回undefined

var a = "string";
alert(a.length); //6
a.t = 3;
alert(a.t);  // undefined

JavaScript類型檢測

在js中檢測類型的方法有很多,比如說:

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

關於typeof:適合基本類型及function檢測,遇到null失效

type 100 返回 “number ”
type true 返回 “boolean ”
type function 返回 “function ”
type [1,2] 返回 “object ”
type NaN 返回 “number ”
type null 返回 “object ”

爲什麼typeof null === “object” ?

這其實是一個歷史的原因,事實上在標準規範中嘗試過讓它返回的結果爲null這樣一個字符串,但這會導致大量的網站無法訪問。

關於obj instanceof Object:適合自定義對象,也可以用來檢測原生對象,在不同iframe和window間檢測時失效

判斷左操作數的對象的原型鏈上是否有右邊這個構造函數的type屬性

  • [1,2] instanceof Array === true
  • new Object() instanceof Array === false

關於Object.prototype.toString

  • Object.prototype.toString.apply([]);=== “[object Array]”;
  • Object.prototype.toString.apply(function(){}); === “[object Function]”;
  • Object.prototype.toString.apply(null);=== “[object Null]”

關於constructor、duck type

constructor會指向構造這個對象的構造函數,由於constructor可以被改寫,所以使用的時候要小心。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章