JavaScript--數據類型

1. 類型轉換
 01) 其餘數據類型到Boolean類型轉換
  經過Boolean() 函數轉換express

         【Boolean        true            false】
      String       非空字符串          ""
      Number     任何非0         0和NaN
      Object      任何對象           null
     Undefined     n/a          undefined (n/a not applicable 不適用)
  例如:
   Boolean("");  //false
   Boolean(0);   //false
   Boolean(NaN);  //false
   Boolean(null)  //false
   Boolean(undefined) //false
   Boolean("briup"); //true
   Boolean(1);   //trueapp

 02) 其餘數據類型到數值類型轉換
  1.Number()
   1) 若是轉換的值是null,undefined,boolean,number
    Number(true);  //1
    Number(false);  //0
    Number(null);  //0
    Number(undefined); //NaN
    Number(10);   //10 若是是數字值,原樣輸出
  
   2) 若是是字符串:
    Number("123");  //若是僅包含數值,轉換爲對應的數值
    Number("234.1");//解析爲對應的小數
    Number("+12.1");//首位爲符號位,其他爲爲數值,轉換爲對應的數值
    NUmber("1+2.3");//NaN 符號位出如今其餘位置,解析爲NaN
    Number("0xa");  //若是僅包含十六進制格式,轉爲爲對應的十進制的值
    Number("010"); //【注意!】不會當作八進制被解析,結果爲10
    Number("");  //空字符串被轉換爲0
    Number("123ac");//包含其餘字符: NaN
    Number(" 12"); //12
  2.parseInt()
   1) 若是轉換的值是null,undefined,boolean,number
    parseInt(true);  //NaN
    parseInt(false); //NaN
    parseInt(null);  //NaN
    parseInt(undefined);//NaN
    parseInt(10);  //10 若是是整數值,原樣輸出
    parseInt(10.3);  //10 若是是小數,捨去小數點一級後面的內容
   2) 若是是字符串:
    parseInt("123");  //123;若是僅包含數值,轉換爲對應的數值
    parseInt("234.1");//234;小數點後面的數值省略
    parseInt("+12.1");//12; 首位爲符號位,其他爲爲數值,轉換爲整數
    parseInt("0xa");  //10; 若是僅包含十六進制格式,轉爲爲對應的十進制的值
    parseInt("010");  //10; 【注意!】不會當作八進制被解析,結果爲10
    parseInt("");   //NaN;空字符串被轉換爲NaN
    parseInt("1+2.3");//1; 若是首位爲數值,依次向後解析,找到連續的數值,直到遇到第一個非數值的,將以前獲取的數值轉換爲Number返回
    parseInt("123ac");//123;
  3.parseFloat()
    與parseInt() 相似,可是也有不一樣:
    1.字符串中的第一個小數點是有效的,而第二個小數點則無效其後的內容會被省略
    2.始終忽略前導0
    parseFloat("22.3.4") //22.3
    parseFloat("022.34"); //22.34
    3.不能解析0x
 03) 其餘數據類型到字符串類型轉換
  1. toString()函數
   默認狀況下,toString()是以十進制格式返回數值的字符串表示,經過傳遞參數,能夠輸入以二進制,八進制,十六進制乃至任意有效進制格式的字符串值
    var num = 10;
    num.toString();  "10"
    num.toString(2); "1010"
    num.toString(8); "12"
    num.toString(16); "a"
   可是null ,undefined 沒有toString() 方法
         null.toString()   //報錯 TypeError: null has no properties 
          undefined.toString(); //報錯 TypeError: undefined has no properties
  2. String() 構造函數
          String(null)  "null"
          String(undefined);  "undefined"函數

2,操做符
 01) 一元操做符
  ++,--,+,-操做符應用任何類型數值都返回一個【數值類型】,先將任意類型的值轉換爲Number而後進行運算(經過Number()方法進行轉換)
  1.遞增 ++ 
   var a = "11";
   1+a++;
   1+ ++a;
   前置:操做該變量以前進行遞增或者遞減操做
   後置:操做該變量以後進行遞增或者遞減操做
   對任意數據類型的操做數都適用,使用前先將其轉換爲數字(Number()),而後再進行運算,在應用於對象的時候,優先先調用對象的valueOf方法,以取得一個可供操做的值,若是子類對象僅重寫了toString(),調用該方法。
  2.遞減 --
   前置:操做該變量以前進行遞增或者遞減操做
   後置:操做該變量以後進行遞增或者遞減操做
   對任意數據類型的操做數都適用,使用前先將其轉換爲數字,而後再進行運算在應用於對象的時候,先調用對象的valueOf方法,以取得一個可供操做的值,若是子類對象僅重寫了toString(),調用該方法。
  3.加 +
   至關於調用Number();
   var a = "12"
   +a ; // 12  至關於調用了Number("12")
  4.減 -
   將一元減應用於數值時,數值會變成負數。
   將一元減應用於非數值時,遵循與一元加操做符相同的規則,最後將獲得的數值轉化爲負數編碼

 02) 布爾操做符, 非(NOT)
  邏輯非 !
  該操做符應用任何類型數值都返回一個【布爾值】。先將任意類型的數值轉換爲Boolean,而後取反,
   !a ==> !Boolean(a)
   !0 //true
   !"" //true 
   !NaN //true 
   !false //truespa

   連用兩次邏輯非 ,就能夠將任意數據類型轉化爲Boolean類型,!!a ==> Boolean(a)
   !!"" //false
03) 邏輯與 && (同真才真,有假則假) 也被稱爲短路語句
  可應用於任意數值。若是有一個操做數不是布爾類型,邏輯與就不必定返回boolean類型對象

  1.若是第一個操做數是
   null,NaN,undefined,false,0,""可被轉換爲false的值的時候返回該值
  2.若是第一個數其餘,返回第二個數
   var s1 = 8;
   var s2 = "briup";
   var s3 = "";
   var result = s1 && s2; //briup
   var result2 = s3 && s2; //空字符串字符串

04) 邏輯或 ||(有真則真,同假才假)
  false ||
  若是兩個操做數都是null,NaN,undefined,false,0,""可被轉換爲false的值的時候返回該值string

  若是第一個操做數是null,NaN,undefined,false,0,"" 則返回第二個操做數
05) 加性操做符
  1. 加法 +
   m + n
   1) 當m,n不爲String,Object類型的時候,先將m,n轉換爲Number類型,而後再進行計算
    true + false;   //1;Number(true)+Number(false);
    true + 1;   //2;Number(true) + 1
    null + undefined; //NaN;Number(undefined) -> NaN
   2) 當m,n有一個爲String,不管另外一個操做數爲什麼(但不爲對象)都要轉換爲String,而後再進行拼接
    "1" + true; // 1true
    "1" + undefined;// 1undefined
    "1" + 1; // 11
   3) 當m,n 有一個爲對象,若是該對象既重寫toString,又重寫了valueOf方法,先調用valueOf方法獲取返回值,將該返回值和另一個操做數進行運算。若是該對象沒有重寫valueOf方法,將調用toString方法獲取返回值,將該返回值和另一個操做數進行運算。
    var o = {
     name:"briup",
     valueOf:function(){
      return "1";
     }
    }
    o+1;  //2;o+1
  
  2. 減法 -
   返回值爲【數值類型】。不管操做數爲任何類型,先將其使用Number()轉換器轉換爲Number類型,而後再計算。
   true - 1;  //0; 1-1
   null - true; //-1 ; 0-1
   1 - undefined //NaN
   var o = {
    name:"briup",
    valueOf:function(){
     return 1;
    }
   }
   o-1;  //0; 1-1
 
06) 乘性操做符
  返回值爲【數值類型】當操做數爲非數值的時候執行自動的類型轉化Number()
  1. 乘法 *
   若是兩個數都是數值,執行常規的乘法計算
   若是一個操做數是NaN,結果爲NaN
   超過數值範圍返回Infinity
   若是有一個操做數不是數值,則先調用Number()將其轉換爲數值。
  2. 除法 /
   若是一個操做數是NaN,結果爲NaN (0/0 ; NaN)
   一個非0值除0 Infinity  
   若是有一個操做數不是數值,則先調用Number()將其轉換爲數值。
   var s1 = 5;
   var s2 = 2;
   var result = s1/s2;  //2.5
  3. 取餘 %
   若是兩個數都是數值,執行常規的取餘計算
   若是一個操做數是NaN,結果爲NaN(任意數%0 ; NaN)
   若是有一個操做數不是數值,則先調用Number()將其轉換爲數值。it

07) 關係操做符
  < > <= >=  ,返回一個【Boolean】值
  1.若是兩個操做數是字符串,比較字符串中對應位置的每一個字符的字符編碼值
   "a">"b" //false
   "1">"a" //false
  2.若是一個操做數是數值,將另一個操做數也轉換爲數值進行比較
   "3">1;   //true
   3>true;   //true 3>Number(true)
   3>undefined; //false Number(undefined)=NaN ;任何數和NaN比較結果都爲false
  3.若是一個操做數是對象,先調用valueOf(),再調用toString()將返回值與另一個操做數比較,若是沒有重寫toString() valueOf()則始終爲false
   var o = {
    name:"briup",
    valueOf:function(){
     return "13";
    }
   }
   o>2  // true ; "13">2
08) 相等操做符,返回【Boolean】
  1.相等和不相等 ==, != (先轉換在比較)
   1.若是兩個操做數都爲字符串,比較字符序列
   2.若是兩個操做數都爲數值類型,比較值的是否相等
   3.若是兩個操做數都是對象,比較的對象的引用
   4)null == undefined  //true
   5)NaN與任何值(包括NaN)相等比較結果爲false,不等結果爲true.
   6)若是一個操做數爲number類型,另一個操做數爲undefined,null,boolean,string之一,先將這些數據類型轉換爲數值,再進行比較io

  2.全等和不全等
   僅比較不轉換,先比較兩個數所屬的數據類型,若是類型不一樣則不一樣,若是類型相同,再繼續比較兩個數的值
   console.log("55" == 55); true
   console.log("55" === 55);false
   null == undifined;  //true null派生自undifined
   null === undifined;  //false

09) 三目運算符 ? :
  variable = boolean_expression ? true_value : false_value;
  若是boolean_expression爲true,將true_value賦給variable,不然將false_value賦給variable
    
  例如:求任意兩個數之間最大值
        function max(m,n){
    return m>n?m:n; //若是m>n爲true返回m,若是m>n爲false,返回n
        }
10) 賦值運算符 =
       將右側的值賦給左側的變量
       能夠和其餘算術運算符連用 *= /= %= += -=
    var a = 4;

       a *= 3; //=> a = a*3;
11) 逗號操做符       能夠在一條語句中執行多個操做       var num1=1,num2 = 2, num3 = 3;

相關文章
相關標籤/搜索