1. 程式人生 > 實用技巧 >JS資料型別

JS資料型別

JS中的7+2中資料型別及區別

基礎資料型別

  • number
  • string
  • boolean
  • null
  • undefined
  • symbol
  • bingint

引用資料型別

  • object
  • function

資料型別檢測

  • typeof 檢測資料型別的邏輯運算子
  • instanceof 檢測是否為某個類的例項
  • constructor 檢測建構函式
  • Object.prototype.toString.call 檢測資料型別

tyoeif [value] 返回當前的資料型別 “資料型別”
返回的結果都死字串
侷限性

  • typeof null = "object"
  • tyoeof undefined = "undefined"
  • typeof 不能細分物件型別(檢測普通物件或者陣列物件都是"object")

number型別

  • NaN:不是一個有效數字,屬於number型別,NaN != NaN,他和誰都不相等 typeof NaN = "number"
  • isNaN(值):檢測這個值是否為無效數字,如果不是有效數字返回TRUE,是有效數字返回FALSE
  • infinity: 無窮 屬於number型別

把其他資料型別轉換為數字的方法

  • 強轉換(基於底層機制轉換的)Number([value]
    一些隱式轉換都死基於Number完成的
    • isNaN('12px')先把其他型別轉換為數字在檢測
    • 數學運算 '12px' - 13
    • 字串 == 數字
    • true 1 false 0
    • null 0 undefined NaN
    • 字串中必須保證都是有效數字才會轉換為數字,否則都是NaN
  • parseInt處理的值是字串,從字串的左側開始查詢有效數字字元(遇到非有效數字字元則停止查詢),如果處理的值不是字串,需要先轉換為字串然後再開始查詢。

+運算子

再兩邊出現字串(或者物件)的情況下,加號一定是字串拼接 ,物件本身是要轉換為數字進行運算的,只不過轉換數字的過程中,需要先轉換為字串,才能轉化為數字,而一旦轉換為字串,就變為字串拼接了

console.log(100 + true + 21.2 + null + undefined +"Lemon" + [] + null + 9 + false)

->NaNLemonnull9false

  • 100 + 1(true) + 21.2 + 0(null) -> 122.2 number
  • 122.2 + NaN(undefined) -> NaN number
  • NaN + 'Lemon' + '' + 'null' + '9' + 'false' -> >NaNLemonnull9fa;se

比較運算子

  • == 在進行比較的時候,如果左右兩邊資料型別不一致,則需要先預設轉換為一致的資料型別,然後在進行比較
  • === 絕對相等,兩邊型別一致,值也一致才相等,型別不一樣,直接不對等,不會轉換

== 規則

  • 物件 == 字串 物件轉換為字串
    [10] == '10' true
  • null == undefined(三個等於號不相等),但是和其他任何的值都不想等
    0 == null false 0在記憶體中開闢空間, null沒有在記憶體中開闢空間
    NaN和誰(包括自己)都不相等
    剩下的情況都轉換為數字在做比較

把其他型別轉換為布林型遵循的規則

只有

  • 0
  • NaN
  • null
  • undefined
  • ""
    這五個值是false(僅限JS引擎)