1. 程式人生 > >100_js筆記3_js的資料型別 + 資料型別轉換

100_js筆記3_js的資料型別 + 資料型別轉換

一,js資料型別

  1. 值型別(基本型別)
    1. String 字串(基本資料型別)
    2. Number 數值(基本資料型別)
    3. Boolean 布林值(基本資料型別)
    4. Null 空值(基本資料型別)
    5. Undefined 未定義(基本資料型別)
    6. Symbol型別
  2. 引用資料型別
    1. Object 物件
    2. Array陣列
    3. Function函式

二,檢視資料型別

  • 使用格式:typeof 資料,例如 typeof 123; typeof num;
  • typeof操作符會將檢查的結果以字串的形式返回給我們
  • var value= 10;
    // 此時將value的資料型別number以字串返回給我們, 存入到res變數中
    var res = typeof value; 
    // 此時檢查res的資料型別為string, 證明typeof返回給我們的是一個字串
    console.log(typeof res); // string
    
    

     

三,String字串型別

  1. 單引號和雙引號均可以
  2. 相同引號不能巢狀,不同引號可以巢狀
  3. 和C語言不同的是, 在C語言中單引號括起來的是字元,而JavaScript中無論單引號還是雙引號括起來的都是字串 

四,Number數字型別

  1.  在JS中所有的數值都是Number型別(整數和小數)
  2. 由於記憶體的限制,ECMAScript 並不能儲存世界上所有的數值
    1. 最大值:Number.MAX_VALUE
      1. console.log(Number.MAX_VALUE);  // 1.7976931348623157e+308
    2. 最小值:Number.MIN_VALUE
      1. console.log(Number.MIN_VALUE);  // 5e-324
    3. 無窮大:Infinity, 如果超過了最大值就會返回該值
      1. console.log(Number.MAX_VALUE + Number.MAX_VALUE); // Infinity
    4. 無窮小:-Infinity, 如果超過了最小值就會返回該值
      1.  console.log(typeof Infinity); // number
      2.  console.log(typeof -Infinity); // number
    5. NaN 非法數字(Not A Number),JS中當對數值進行計算時沒有結果返回,則返回NaN
      1. var num3 = NaN;
      2. console.log(typeof num3); // number
  3. JS中整數的運算可以保證精確的結果;在JS中浮點數的運算可能得到一個不精確的結果
  4. 在C語言中整數是int,小數是float或者double;而JavaScript中無論是整數還是小數都是Number

五,Boolean 布林型別

  1. 布林型只能夠取真(true)和假(false)兩種數值
  2. 任何非零數值都是true, 包括正負無窮大, 只有0和NaN是false
  3. 任何非空字串都是true, 只有空字串是false
  4. 任何物件都是true, 只有null和undefined是false 

六,Undefined型別

  1. Undefined這是一種比較特殊的型別,表示變數未賦值,這種型別只有一種值就是undefined
  2. undefined是Undefined型別的字面量
    1. 前者undefined和10, "abc"一樣是一個常量
    2. 後者Undefined和Number,Boolean一樣是一個數據型別
  3. 需要注意的是typeof對沒有初始化和沒有宣告的變數都會返回undefined。 

七,Null型別

  1. Null 型別是第二個只有一個值的資料型別,這個特殊的值是 null
  2. 從語義上看null表示的是一個空的物件。所以使用typeof檢查null會返回一個Object
  3. undefined值實際上是由null值衍生出來的,所以如果比較undefined和null是否相等,會返回true

八,Symbol型別

Symbol 是 ES6 引入了一種新的原始資料型別,表示獨一無二的值

九,資料型別轉換

  1. 其它型別轉換為字串
    1. 呼叫被轉換資料型別的toString()方法
      1. 該方法不會影響到原變數,它會將轉換的結果返回
      2. null和undefined這兩個值沒有toString()方法
    2. 呼叫String()函式
      1. 對於Number和Boolean實際上就是呼叫的toString()方法
      2. null和undefined這兩個值有String()方法
    3. 將被轉換的資料和+""連線到一起 
      1. 任何資料和 +"" 連線到一起都會轉換為字串
      2.       var num1 = 10;
                var res1 = String(num1); // 重點
                console.log(res1); // 10
                console.log(typeof res1); // string
  2. 其它型別轉換為Number型別
    1. 將被轉換的資料傳入Number()函式中
      1. 字串 --> 數字
        1. 如果是純數字的字串,則直接將其轉換為數字
              var str1 = "123";
              var res1 = Number(str1);
              console.log(res1); // 123
              console.log(typeof  res1); // number
          如果字串中有非數字的內容,則轉換為NaN
              var str2 = "123ab";
              var res2 = Number(str2);
              console.log(res2); // NaN
          如果字串是一個空串或者是一個全是空格的字串,則轉換為0
              var str3 = "";
              var res3 = Number(str3);
              console.log(res3); // 0
          
              var str4 = "    ";
              var res4 = Number(str4);
              console.log(res4); // 0
          
          

           

      2. 布林 --> 數字
        1. true 轉成 1
          false 轉成 0
              var bool1 = true;
              var res5 = Number(bool1);
              console.log(res5); // 1
          
              var bool2 = false;
              var res6 = Number(bool2);
              console.log(res6); // 0
          null --> 數字 --> 0
              var str5 = null;
              var res7 = Number(str5);
              console.log(res7); // 0
          undefined --> 數字 --> NaN
             var str6 = undefined;
             var res8 = Number(str6);
             console.log(res8); // NaN
          
          

           

    2. 將被轉換的資料傳入parseInt()函式中/parseFloat()函式中
      1. parseInt()提取字串中的整數
        1. 從第一位有效數字開始, 直到遇到無效數字
          如果第一位不是有效數字, 什麼都提取不到, 會返回NaN
          第一個引數是要轉換的字串,第二個引數是要轉換的進位制
              var str7 = "300px";
              var res9 = parseInt(str7);
              console.log(res9); // 300
          
              var str8 = "300px250";
              var res10 = parseInt(str8);
              console.log(res10); // 300
          
              console.log(parseInt("abc123"));  //返回NaN,如果第一個字元不是數字或者符號就返回NaN
              console.log(parseInt(""));        //空字串返回NaN,Number("")返回0
          
          
      2. parseFloat提取字串中的小數
        1. 會解析第一個. 遇到第二個.或者非數字結束
          如果第一位不是有效數字, 什麼都提取不到
          不支援第二個引數,只能解析10進位制數
          如果解析的內容裡只有整數,解析成整數
              var str9 = "20.5px";
              var res11 = parseInt(str9);
              console.log(res11); // 20
          
              var str10 = "20.5.5.5px";
              var res12 = parseFloat(str10);
              console.log(res12); // 20.5
          
          

           

      3. 對非String使用parseInt()或parseFloat(), 會先將其轉換為String然後在操作
        1.         var str11 = true;
                  var res13 = parseInt(str11); // 這裡相當於parseInt("true");
                  console.log(res13); // NaN
                  var res14 = Number(str11);
                  console.log(res14); // 1
          
          
      4. parseInt(),parseFloat(),Number()函式的區別

        1. Number()函式中無論混合字串是否存在有效整數都會返回NaN
        2. 利用parseInt()/parseFloat()可以提取字串中的有效整數
        3. parseFloat()會解析第一個. 遇到第二個.或者非數字結束
        4. 兩者之前的區別是前者只能提取整數,後者可以提取小數
    3. 利用+ - 運算子
      1. 新增+號, 不會修改資料的正負性
      2. 新增-號, 會修改資料的正負性
      3. var str1 = "666";
                var res1 = +str1;
                console.log(res1); // 666
                console.log(typeof res1);
        
                var str2 = "3.14";
                var res2 = +str2;
                console.log(res2); // 3.14
                console.log(typeof res2);
        
                var str3 = "666px";
                var res3 = +str3;
                console.log(res3); // NaN
                console.log(typeof res3);
        
                var flag = false;
                var res4 = +flag;
                console.log(res4); // 0
                console.log(typeof res4);
        
                var flag = true;
                var res4 = +flag;
                console.log(res4); // 1
                console.log(typeof res4);