JavaScript 數據類型(一)

Undefined 類型

只有一個值,即特殊的 undefined。聲明瞭但未對其加以初始化時,這個變量的值就是undefined。對未聲明的變量使用typeof操做符會返回undefined。可是其它操做的話就會報錯。瀏覽器

console.log(typeof foo) // "undefined"
console.log(foo) // ReferenceError

關於 undefined 還有一種嚴謹的作法就是經過 void 0 來實現。這樣實現的緣由是 undefined 不是 JavaScript 的關鍵字,也就是說能夠將 undefined 做爲標識符,或者說 window.undefined 的值是能夠被修改的。函數

Null 類型

只有一個值,即特殊的 null。從邏輯角度來看,null值表示一個空對象指針,因此使用typeof操做符檢測null值返回object測試

若是定義的變量準備在未來用於保存對象,那麼最好將該變量初始化爲 null

Boolean 類型

主要介紹 Boolean() 函數設計

console.log(Boolean('a')) // true
console.log(Boolean('')) // false
console.log(Boolean(1)) // true
console.log(Boolean(0)) // false
console.log(Boolean(-1)) // true
console.log(Boolean(NaN)) // false
console.log(Boolean(Infinity)) // true
console.log(Boolean(-Infinity)) // true
console.log(Boolean({})) // true
console.log(Boolean(null)) // false
console.log(Boolean(undefined)) // false

Number 類型

採用IEEE754格式來表示整數和浮點數值。指針

// 十進制

const intNum = 55; 

// 八進制 -- 第一位必須是 0 ,後面是八進制數字序列(0 ~ 7)在嚴格模式下無效,並拋出錯誤。

const octalNum1 = 070; // 八進制的 56
const octalNum2 = 079; // 無效的八進制數值--解析爲79
const octalNum3 = 08; // 無效的八進制數值--解析爲8

// 十六進制 -- 前兩位必須是 0x ,後面是十六進制數字(0 ~ 9 及 A ~ F),字母 A ~ F 不分大小寫。

const hexNum1 = 0xA; // 十六進制的10
const hexNum1 = 0x1f; // 十六進制的31

在進行算數運算時,全部八進制和十六進制的數值都將被轉換爲十進制數值。code

浮點數值

  1. 最高精度是17位小數。
  2. 默認狀況下,ECMAScript會將小數點後面帶有6個零以上的浮點數值轉換爲科學計數法。
  3. 永遠不要測試某個特定的浮點數值。
const floatNum1 = .1; // 有效,不推薦
const floatNum2 = 1.; // 小數點後沒有數字,解析爲1
const floatNum3 = 10.0; // 整數,解析爲10
const floatNum4 = 3.125e7; // 科學計數法。3.125乘以10的7次方。等於 31250000。

//判斷兩個數是否相等
function equal(n1, n2) {
    return Math.abs(n1 - n2) < Number.EPSILON;
}
equal(0.1 + 0.2, 0.3) // true

數值範圍

  1. Number.MIN_VALUE。最小數值,多數瀏覽器這個值是 5e-324
  2. Number.MAX_VALUE。最大數值,多數瀏覽器這個值是 1.7976931348623157e+308
  3. 若是超出範圍就會自動轉爲特殊的 Infinity 值,若是是正數就是 Infinity(正無窮),負數就是 -Infinity(負無窮)。
  4. isFinite() 函數判斷一個數是不是有窮的。
  5. Number.NEGATIVE_INFINITY。負無窮的值。
  6. Number.POSITIVE_INFINITY。正無窮的值。

NaN

  1. 任何涉及NaN的操做都會返回NaN。
  2. NaN不等於任何值,包括NaN自己。
  3. 經過 isNaN() 函數檢查傳入的參數是否「不是數值」。對象

    console.log(0/0); // NaN
    console.log(10/0); // Infinity
    console.log(-10/0); // -Infinity
    console.log(10/'a'); // NaN
    console.log(10/''); // Infinity
    console.log(10/undefined); // NaN
    console.log(10/true); // 10
    console.log(10/false); // Infinity 
    console.log(10/null); // Infinity
    
    console.log(isNaN(NaN)); // true
    console.log(isNaN(10)); // false
    console.log(isNaN("10")); // false -- 能夠被轉換成數值10
    console.log(isNaN("blue")); // true -- 不能轉換成數值
    console.log(isNaN(true)); // true -- 能夠被轉換成數值 1
    
    // isNaN() 也適用於對象。會先調用對象的 valueOf() 方法,若是返回值不能轉換爲數值,則基於這個返回值再調用 toString() 方法,再測試返回值。

數值轉換

  1. Number()
  2. parseInt()
  3. parseFloat()
console.log(Number(10)); // 10
console.log(Number("")); // 0
console.log(Number("abc")); // NaN
console.log(Number("000011")); // 11
console.log(Number("123abc")); // NaN
console.log(Number(true)); // 1
console.log(Number(false)); // 0
console.log(Number(undefined)); // NaN
console.log(Number(null)); // 0

// 使用 parseInt() 推薦始終帶上第二個參數:轉換時使用的基數(即多少進制)。
console.log(parseInt(22.5); // 22
console.log(parseInt("")); // NaN
console.log(parseInt("70")); // 70
console.log(parseInt("123abc")); // 1234
console.log(parseInt("070")); // ECMAScript 5 認爲是70(十進制),ECMAScript 3 認爲是56(八進制)
console.log(parseInt("0xA")); // 10
console.log(parseInt("0xf")); // 15

// parseFloat() 會解析每一個字符,或解析到碰見一個無效的浮點數字符爲止。並且始終會忽略前導的零。只解析十進制值。

console.log(parseFloat("22.5")); // 22.5
console.log(parseFloat("123abc")); // 123
console.log(parseFloat("0xA")); // 0
console.log(parseFloat("22.34.5")); // 22.34
console.log(parseFloat("0908.5")); // 908.5
console.log(parseFloat("3.125e7")); // 31250000

String 類型

String 類型用於表示由零或多個16位Unicode字符組成的字符序列,即字符串。任何字符串的長度均可以經過訪問其length屬性取得。ip

字符字面量

String數據類型包含一些特殊的字符字面量,也叫轉義序列。
字面量 含義
\n 換行
\t 製表
\b 退格
\r 回車
\f 進紙
\\ 斜槓
\' 單引號 ( ' ) ,在用單引號表示的字符串中使用,例如: 'He said,  \'hey.\' '
\" 雙引號 ( " ) ,在用雙引號表示的字符串中使用,例如: "He said,  \"hey.\" "
\xnn 以十六進制代碼 nn 表示的一個字符(其中 n 爲 0 ~ F)。例如, x41 表示 'A'
\unnnn 以十六進制代碼 nnnn 表示的一個 Unicode 字符(其中 n 爲 0 ~ F)。例如, u03a3 表示希臘字符 Σ

轉換爲字符串

1. toString()
除了nullundefined沒有這個方法,其它都有。有一個參數:輸出數值的基數,默認是十進制。字符串

const num = 10;
console.log(num.toString()); // "10"
console.log(num.toString(2)); // "1010"
console.log(num.toString(8)); // "12"
console.log(num.toString(10)); // "10"
console.log(num.toString(16)); // "a"

const bool = true;
console.log(bool.toString()); // "true"

const obj = {};
console.log(obj.toString()); // "[object Object]"

const func = function() {};
console.log(func.toString()); // "function() {}"

const nul = null;
console.log(nul.toString()); // TypeError: Cannot read property 'toString' of null

const unde= undefined;
console.log(unde.toString()); // TypeError: Cannot read property 'toString' of undefined

2. String()
在不知道要轉換的值是否是nullundefined的狀況下,還可使用轉型函數String(),這個能夠將任何類型的值轉爲字符串。遵循如下轉換規則get

  • 若是值有toString()方法,則調用該方法(沒有參數)並返回相應的結果;
  • 若是值是null,則返回"null"
  • 若是值是undefined,則返回"undefined"

3. 使用加號操做符與一個字符串(" ")加在一塊兒

const bool = true;
console.log(bool + ""); // "true"

const nul = null;
console.log(nul + ""); // "null"

const unde= undefined;
console.log(unde + ""); // "undefined"

typeof 操做符

// typeof的操做數能夠是變量也能夠是字面量
console.log(typeof foo) // "undefined"
console.log(typeof true) // "boolean"
console.log(typeof "abcd") // "string"
console.log(typeof 1) // "number"
console.log(typeof null) // "object"
console.log(typeof {}) // "object"
console.log(typeof function(){}) // "function"

參考

《JavaScript高級程序設計》(第三版)

相關文章
相關標籤/搜索