數據類型分類
- 原始類型
- 值直接保存在變量本地的數據類型
- 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
- x.toString(); x不是undefined或null時, 纔可用
- String(x); 相當於隱式轉換, 此法萬能
- 任意類型->數字API
- Number(x); 專用於將非字符串類型轉數字, 相當於隱式轉換(字符串轉數字將轉換爲NaN)
- 字符串->數字API
- parseInt(str): 從第一個字符開始, 依次讀取每個數字, 只要碰上第一個非數字字符就停止, 自動跳過開頭的空字符
- 注意: 不認識小數點
- 何時使用: 將字符串轉爲整數時
- parseFloat(str):用法同parseInt
- 注意: 認識小數點
- 何時使用: 將字符串轉爲小數時
- parseInt(str): 從第一個字符開始, 依次讀取每個數字, 只要碰上第一個非數字字符就停止, 自動跳過開頭的空字符
- 字符串->數字API
- Number(x); 專用於將非字符串類型轉數字, 相當於隱式轉換(字符串轉數字將轉換爲NaN)
- 任意類型->BooleanAPI
- Boolean(x); 相當於隱式轉換
- 以下5值轉換爲false, 其它均轉換爲true
- ”” | NaN | undefined | null | 0
- 以下5值轉換爲false, 其它均轉換爲true
- Boolean(x); 相當於隱式轉換
- 快速轉換:
- 任意類型->String
- x+”“
- 任意類型->Boolean
- !!x
- 任意類型->String
- 隱式轉換: 不需要程序員干預, JS自動完成的類型轉換。