JS之數據類型相關

數據類型分類

  • 原始類型
    • 值直接保存在變量本地的數據類型
    • 5種: Null | Undefined | Boolean | String | Number
  • 引用類型
    • 值不保存在變量本地的數據類型

數據類型詳解

  • 首先說一個運算符: typeof
    • typeof運算符有一個參數, 即要檢查的變量或值
    • 對變量或值調用typeof運算符將返回下列值之一:
      • object——如果變量是引用類型或Null類型
      • 其餘4中原始類型返回對應的類型值
    • 注意: 爲什麼typeof運算符對於Null類型會返回”object”? 這實際上是JavaScript最初實現時的一個錯誤, 然後被ECMAScript沿用了。現在, null被認爲是對象的佔位符, 從而解釋了這一矛盾, 但從技術上來說, 它仍然是原始值。
  • 原始類型之Undefined
    • Undefined類型只有一個值undefined。當聲明的變量未初始化時, 該變量的默認值是undefined。
    • 函數無明確返回值時, 返回的也是值undefined
    • 注意: 值undefined並不同於未定義的值。但是typeof運算符並不真正區分這兩種值。
      • 當變量未聲明而直接使用typeof運算符時, 將返回undefined。
      • 但當未聲明的變量使用其它運算符時, 將會報錯。
  • 原始類型之Null
    • Null類型只有一個值null, 即它的字面量。
    • 值undefined實際上是由值null派生來的, 因此ECMAScript把它們定義爲相等的。
    • 儘管這兩個值相等, 但它們的含義不同。undefined是聲明瞭變量但未對其進行初始化時賦予該變量的值, null則用於表示尚未存在的變量。如果函數或方法要返回的是對象, 那麼找不到該對象時, 返回的通常是null。
  • 原始類型之Boolean
    • Boolean類型有兩個值true和false(即兩個Boolean字面量)
  • 原始類型之String
    • String類型是唯一沒有固定大小的原始類型。可以用字符串存儲0或更多個Unicode字符, 用16位整數表示。
    • 字符串中每個字符都有特定的位置, 首字符從位置0開始, 第二個字符在位置1, 以此類推。
    • 字符串字面量是由單引號或雙引號聲明的。
    • 字符串的內容一旦創建, 不可改變。要想改變, 只能用另一個新字符串替換。
    • String類型還包括幾種字符字面量, 包括換行符\n、製表符\t等。
  • 原始類型之Number
    • Number類型既可以表示32位的整數, 也可以表示64位的浮點數
    • 直接輸入的(而非從另一個變量訪問的)任何數字都被看做是Number類型的字面量
    • 整數也可以被表示爲八進制或十六進制的字面量。八進制字面量的首數字必須爲0。十六進制字面量的首兩位必須爲0x, 其後接十六進制數, 十六進制字母可大寫, 亦可小寫。
    • 注意: 儘管所有整數都可以被表示爲八進制或十六進制字面量, 但所有的數學運算返回的都是十進制的結果。
    • 浮點數在進行計算前, 真正存儲的是字符串
    • 科學計數法
      • 如var fnum = 5.618e7表示5.618x107
      • 如var fnum = 8-e17表示8x10-17
    • 特殊的Number值
      • Infinity | -Infinity | NaN
    • 如果計算返回的是無窮大值, 那麼生成的結果不能再用於其他計算。
    • 兩個方法:
      • isFinite(), 可以對任何數調用isFinite()方法, 以確保該數不是無窮大
      • isNaN(), 判斷一個數字是否爲數字

數據類型轉換

  • 兩大類轉換方式: 隱式轉換和強制轉換
    • 隱式轉換: 不需要程序員干預, JS自動完成的類型轉換。
      • 隱式轉換無處不在, 只要JS認爲有必要。
      • 算術運算中, 一切數據都默認轉換爲數字, 再計算。
        • Null類型: null->0
        • Undefined類型: undefined->NaN
        • Boolean類型: true->1 ; false->0
        • 在+運算中, 碰到字符串, +就變爲字符串拼接, 另一個不是字符串的數據, 自動轉換爲字符串。
    • 強制轉換:程序員主動調用專門的函數, 執行轉換
      • 何時使用: 自動轉換的類型, 不是想要得到的
      • 任意類型->字符串API
        1. x.toString(); x不是undefined或null時, 纔可用
        2. String(x); 相當於隱式轉換, 此法萬能
      • 任意類型->數字API
        1. Number(x); 專用於將非字符串類型轉數字, 相當於隱式轉換(字符串轉數字將轉換爲NaN)
          • 字符串->數字API
            1. parseInt(str): 從第一個字符開始, 依次讀取每個數字, 只要碰上第一個非數字字符就停止, 自動跳過開頭的空字符
              • 注意: 不認識小數點
              • 何時使用: 將字符串轉爲整數時
            2. parseFloat(str):用法同parseInt
              • 注意: 認識小數點
              • 何時使用: 將字符串轉爲小數時
      • 任意類型->BooleanAPI
        1. Boolean(x); 相當於隱式轉換
          • 以下5值轉換爲false, 其它均轉換爲true
            • ”” | NaN | undefined | null | 0
      • 快速轉換:
        • 任意類型->String
          • x+”“
        • 任意類型->Boolean
          • !!x
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章