JS裏的數據類型

1. 概述

JavaScript一共有7種數據類型:javascript

  • 數值(number):整數和小數
  • 字符串(string):文本(好比Hello World)。
  • 布爾值(boolean):表示真僞的兩個特殊值,即true(真)和false(假)
  • undefined:表示「未定義」或不存在,即因爲目前沒有定義,因此此處暫時沒有任何值
  • null:表示空值,即此處的值爲空。
  • 對象(object):各類值組成的集合。
  • 符號(symbol):ES6新增。暫不討論。

通常將number,string,boolean視爲原始類型(primitive type)的值,對象則稱爲合成類型(complex type)的值,undefined和null爲JS特有的特殊的值。html

對象又能夠分爲三個子類型:java

  • 狹義的對象(object)
  • 數組(array)
  • 函數(function)

須要注意的是array和function並非七種類型之一。數組

2. 數值

  1. 全部數字都是以64位浮點數形式儲存(很浪費)
  2. 小數運算不精確
0.1 + 0.2
0.30000000000000004
複製代碼
  1. JavaScript的精度範圍爲-253到253 ,可以表示的數值範圍爲21024到2-1023
  2. 數值的進制:開頭有0要當心
    1. 十進制:沒有前導0的數值。
    2. 八進制:有前綴0o0O的數值,或者有前導0、且只用到0-7的八個阿拉伯數字的數值。
    3. 十六進制:有前綴0x0X的數值。
    4. 二進制:有前綴0b0B的數值。
0xff // 255
0o377 // 255
0b11 // 3
複製代碼
  1. 特殊數字
    1. NaN:Not a Number
    2. +Infinity-Infinity

3. 字符串

  1. JavaScript 不只以 Unicode 儲存字符,還容許直接在程序中使用 Unicode 碼點表示字符,即將字符寫成\uxxxx。但 JavaScript 對 UTF-16 的支持是不完整的,只編到U+FFFF
  2. 空字符串:''
  3. 多行字符串
var a = '123' +
'456';
複製代碼
var a = `123 456`;
複製代碼
  1. 轉義符
\n :換行符(\u000A)
\r :回車鍵(\u000D)
\' :單引號(\u0027)
\" :雙引號(\u0022)
\\ :反斜槓(\u005C)
\0 :null(\u0000)
\b :後退鍵(\u0008)
\f :換頁符(\u000C)
\t :製表符(\u0009)
\v :垂直製表符(\u000B)
複製代碼
  1. Base64 轉碼
    • btoa():任意值轉爲 Base64 編碼
    • atob():Base64 編碼轉爲原來的值
    • 要將非 ASCII 碼字符轉爲 Base64 編碼,必須中間插入一個轉碼環節,再使用這兩個方法

4. 布爾值

  1. 布爾值表明「真」和「假」兩個狀態。「真」用關鍵字true表示,「假」用關鍵字false表示。布爾值只有這兩個值。
  2. 運算符號
前置邏輯運算符:! (Not)
相等運算符:===,!==,==,!=
比較運算符:>,>=,<,<=
複製代碼
  1. 如下6個值轉化爲Boolean時爲false,稱爲falsy(虛值)。undefined null false 0 NaN ""或''(空字符串)

5. null 和 undefined

  1. 都表示沒有值,null表示空值,即該處的值如今爲空。undefined表示「未定義」。
undefined == null    // true
複製代碼
  1. (習俗)若是你想表示一個還沒賦值的對象,就用null。若是你想表示一個還沒賦值的字符串/數字/布爾/symbol,就用 undefined(可是實際上你直接var xxx一下就好了,不用寫var xxx = undefined

6. 對象

  1. 對象就是一組「鍵值對」(key-value)的集合,是就是幾種基本數據類型(無序地)組合在一塊兒。
  2. 所以對象裏面也能夠有對象
  3. key必須爲字符串,不符合標識符條件必須加引號(更多人不喜歡加)。
  4. 屬性讀取:有兩種方法,一種是使用點運算符,還有一種是使用方括號運算符
    1. 符合標識符規則時,object['key']能夠寫做object.key
    2. 若是使用方括號運算符,鍵名必須放在引號裏面,不然會被看成變量處理。注意object['key']object[key]區別
  5. 屬性刪除:delete object['key']
    1. 查詢該屬性值爲undefined,此時key也刪掉了,用in查爲false
    2. 若是給key賦值undefined,用in查爲true
  6. 屬性查看:Object.keys
  7. 屬性是否存在:用in運算符,自身和繼承的都能看到。
var obj = { p: 1 };
'p' in obj  // true
'toString' in obj   // true
複製代碼
  1. 屬性遍歷:for...in
    1. 它遍歷的是對象全部可遍歷(enumerable)的屬性,會跳過不可遍歷的屬性。
    2. 它不只遍歷對象自身的屬性,還遍歷繼承的屬性。

7. typeof 運算符

typeof能夠用來判斷數據類型,可是存在兩個bug:bash

  • typeof null //'object'
  • 並無function數據類型,但會顯示
function f() {}
typeof      // "function"
複製代碼

8. Symbol

詳見:JS 中的 Symbol 是什麼?函數

9. 參考資料

JavaScript教程——阮一峯編碼

相關文章
相關標籤/搜索