JavaScript基礎(chǔ)-數(shù)據(jù)類型轉(zhuǎn)換

什么是數(shù)據(jù)類型轉(zhuǎn)換

  • 將一個(gè)數(shù)據(jù)類型轉(zhuǎn)換為其他的數(shù)據(jù)類型

    • 例如: 將Number類型轉(zhuǎn)換為Boolean類型

    • 例如: 將Number類型轉(zhuǎn)換為字符串類型

將其它類型轉(zhuǎn)換為字符串

調(diào)用被轉(zhuǎn)換數(shù)據(jù)類型的toString()方法

        var num1 = 10;
        var res1 = num1.toString(); // 重點(diǎn)
        console.log(res1); // 10
        console.log(typeof res1); // string

        var num2 = true;
        var res2 = num2.toString(); // 重點(diǎn)
        console.log(res2); // true
        console.log(typeof res2); // string

  • null和undefined這兩個(gè)值沒有toString()方法劣坊,如果調(diào)用他們的方法,會(huì)報(bào)錯(cuò)
        var num3 = undefined;
        var res3 = num3.toString(); // 報(bào)錯(cuò)
        console.log(res3);

        var num4 = null;
        var res4 = num4.toString(); // 報(bào)錯(cuò)
        console.log(res4);

        var num5 = NaN;
        var res5 = num5.toString();
        console.log(res5); // NaN
        console.log(typeof res5); // String

  • 該方法不會(huì)影響到原變量屈留,它會(huì)將轉(zhuǎn)換的結(jié)果返回
        var num6 = 10;
        var res6 = num6.toString();
        console.log(typeof num6); // number
        console.log(typeof res6); // string

  • 數(shù)值類型的toString()局冰,可以攜帶一個(gè)參數(shù),輸出對(duì)應(yīng)進(jìn)制的值(暫時(shí)不用了解, 講到進(jìn)制轉(zhuǎn)換再回來看)
        var num7 = 20;
        var res7 = num7.toString(2);
        var res8 = num7.toString(8);
        var res9 = num7.toString(10);
        var res10 = num7.toString(16);
        console.log(res7); // 10100
        console.log(res8); // 24
        console.log(res9); // 20
        console.log(res10); // 14

將被轉(zhuǎn)換的數(shù)據(jù)傳入String()函數(shù)中

  • String()函數(shù)存在的意義:

    • 有些值沒有toString()灌危,這個(gè)時(shí)候可以使用String()锐想。比如:undefined和null
  • 對(duì)于Number和Boolean實(shí)際上就是調(diào)用的toString()方法

        var num1 = 10;
        var res1 = String(num1); // 重點(diǎn)
        console.log(res1); // 10
        console.log(typeof res1); // string

        var num2 = true;
        var res2 = String(num2); // 重點(diǎn)
        console.log(res2); // true
        console.log(typeof res2); // string

  • 對(duì)于null和undefined,就不會(huì)調(diào)用toString()方法(因?yàn)檫@兩個(gè)哥們沒有這個(gè)方法).而是在內(nèi)部生成一個(gè)新的字符串
        var num3 = undefined;
        var res3 = String(num3);
        console.log(res3); // undefined
        console.log(typeof res3); // string

        var num4 = null;
        var res4 = String(num4);
        console.log(res4); // null
        console.log(typeof res4); // string

將被轉(zhuǎn)換的數(shù)據(jù)和+""連接到一起

  • 任何數(shù)據(jù)和 +"" 連接到一起都會(huì)轉(zhuǎn)換為字符串

  • 內(nèi)部實(shí)現(xiàn)原理和String()函數(shù)一樣

        var num1 = 10;
        var res1 = num1 + "";
        console.log(res1); // 10
        console.log(typeof res1); // string

        var num2 = true;
        var res2 = num2 + "";
        console.log(res2); // true
        console.log(typeof res2); // string

        var num3 = undefined;
        var res3 = num3 + "";
        console.log(res3); // undefined
        console.log(typeof res3); // string

        var num4 = null;
        var res4 = num4 + "";
        console.log(res4); // null
        console.log(typeof res4); // string


將其它類型轉(zhuǎn)換為Number類型

將被轉(zhuǎn)換的數(shù)據(jù)傳入Number()函數(shù)中

  • 字符串 --> 數(shù)字

    • 如果是純數(shù)字的字符串乍狐,則直接將其轉(zhuǎn)換為數(shù)字

          var str1 = "123";
          var res1 = Number(str1);
          console.log(res1); // 123
          console.log(typeof  res1); // number
      
      
    • 如果字符串中有非數(shù)字的內(nèi)容赠摇,則轉(zhuǎn)換為NaN

          var str2 = "123ab";
          var res2 = Number(str2);
          console.log(res2); // NaN
      
      
    • 如果字符串是一個(gè)空串或者是一個(gè)全是空格的字符串,則轉(zhuǎn)換為0

          var str3 = "";
          var res3 = Number(str3);
          console.log(res3); // 0
      
          var str4 = "    ";
          var res4 = Number(str4);
          console.log(res4); // 0
      
      
  • 布爾 --> 數(shù)字

    • true 轉(zhuǎn)成 1

    • false 轉(zhuǎn)成 0

          var bool1 = true;
          var res5 = Number(bool1);
          console.log(res5); // 1
      
          var bool2 = false;
          var res6 = Number(bool2);
          console.log(res6); // 0
      
      
  • null --> 數(shù)字 --> 0

        var str5 = null;
        var res7 = Number(str5);
        console.log(res7); // 0
    
    
  • undefined --> 數(shù)字 --> NaN

       var str6 = undefined;
       var res8 = Number(str6);
       console.log(res8); // NaN
    
    

將被轉(zhuǎn)換的數(shù)據(jù)傳入parseInt()函數(shù)中/parseFloat()函數(shù)中

  • Number()函數(shù)中無論混合字符串是否存在有效整數(shù)都會(huì)返回NaN

  • 利用parseInt()/parseFloat()可以提取字符串中的有效整數(shù)

  • 兩者之前的區(qū)別是前者只能提取整數(shù),后者可以提取小數(shù)

  • parseInt()提取字符串中的整數(shù)

    • 從第一位有效數(shù)字開始, 直到遇到無效數(shù)字

    • 如果第一位不是有效數(shù)字, 什么都提取不到, 會(huì)返回NaN

    • 第一個(gè)參數(shù)是要轉(zhuǎn)換的字符串浅蚪,第二個(gè)參數(shù)是要轉(zhuǎn)換的進(jìn)制

          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藕帜,如果第一個(gè)字符不是數(shù)字或者符號(hào)就返回NaN
          console.log(parseInt(""));        //空字符串返回NaN,Number("")返回0
      
      
  • parseFloat提取字符串中的小數(shù)

    • 會(huì)解析第一個(gè). 遇到第二個(gè).或者非數(shù)字結(jié)束

    • 如果第一位不是有效數(shù)字, 什么都提取不到

    • 不支持第二個(gè)參數(shù)惜傲,只能解析10進(jìn)制數(shù)

    • 如果解析的內(nèi)容里只有整數(shù)洽故,解析成整數(shù)

          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
      
      
  • 對(duì)非String使用parseInt()或parseFloat(), 會(huì)先將其轉(zhuǎn)換為String然后在操作

        var str11 = true;
        var res13 = parseInt(str11); // 這里相當(dāng)于parseInt("true");
        console.log(res13); // NaN
        var res14 = Number(str11);
        console.log(res14); // 1


進(jìn)制轉(zhuǎn)換

  • 什么是進(jìn)制?

    • 是一種計(jì)數(shù)的方式,數(shù)值的表示形式
  • 常見的進(jìn)制

    • 十進(jìn)制、二進(jìn)制盗誊、八進(jìn)制时甚、十六進(jìn)制
  • 進(jìn)制數(shù)字進(jìn)位方法

    • 十進(jìn)制 0、1哈踱、2荒适、3、4开镣、5刀诬、6、7邪财、8陕壹、9 逢十進(jìn)一

    • 二進(jìn)制 0质欲、1 逢二進(jìn)一

      • 書寫形式:需要以0b或者0B開頭,比如0b101
    • 八進(jìn)制 0、1糠馆、2嘶伟、3、4又碌、5奋早、6、7 逢八進(jìn)一

      • 書寫形式:在前面加個(gè)0,比如045
    • 十六進(jìn)制 0赠橙、1耽装、2、3期揪、4掉奄、5、6凤薛、7姓建、8、9缤苫、A速兔、B、C活玲、D涣狗、E、F 逢十六進(jìn)一

      • 16進(jìn)制就是逢16進(jìn)1,但我們只有0~9這十個(gè)數(shù)字,所以我們用A,B,C,D,E,F這五個(gè)字母來分 別表示10,11,12,13,14,15舒憾。字母不區(qū)分大小寫镀钓。

      • 書寫形式:在前面加個(gè)0x或者0X,比如0x45

  • 練習(xí)判斷下列數(shù)字是否合理

00011  0x001  0x7h4  10.98  0986  .089-109
+178  0b325  0b0010  0xffdc  -.003

  • 十進(jìn)制轉(zhuǎn)換二進(jìn)制

    • 規(guī)律: 用需要轉(zhuǎn)換的十進(jìn)制/2取余然后倒敘

          9 / 2 = 4 = 1
          4 / 2 = 2 = 0
          2 / 2 = 1 = 0
          1 / 2 = 0 = 1
          結(jié)果1001
      
          var num = 0b1001;
          console.log(num);
          console.log(parseInt("1001", 2));
      
      
  • 二進(jìn)制轉(zhuǎn)換十進(jìn)制

    • 規(guī)律: 從低位數(shù)開始, 用低位 * 2的多少次冪, 冪數(shù)從0開始遞增

          1001
          1 * 2(0) = 1
          0 * 2(1) = 0
          0 * 2(2) = 0
          1 * 2(3) = 8
          結(jié)果: 1 + 0 + 0 +8 = 9
      
      
  • 二進(jìn)制轉(zhuǎn)換八進(jìn)制

    • 因?yàn)榘诉M(jìn)制逢八進(jìn)一

    • 規(guī)律: 三個(gè)二進(jìn)制位代表一個(gè)八進(jìn)制位, 只需要從低位開始將三個(gè)二進(jìn)制位轉(zhuǎn)換為十進(jìn)制再鏈接起來

                 00 001 001
       結(jié)果:    0     1     1 = 011
       console.log(parseInt("011", 8)); // 9
      
      
  • 二進(jìn)制轉(zhuǎn)換十六進(jìn)制

    • 因?yàn)槭M(jìn)制逢十六進(jìn)一

    • 規(guī)律: 四個(gè)二進(jìn)制位代表一個(gè)十六進(jìn)制位, 只需要從低位開始將事個(gè)二進(jìn)制位轉(zhuǎn)換為十進(jìn)制再鏈接起來

              0001 1011
        結(jié)果:    1      b = 0x1b
        console.log(parseInt("0x1b", 16));// 27
      
      
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>JavaScript基礎(chǔ)-數(shù)據(jù)類型轉(zhuǎn)換</title>
  </head>
  <body>

    <script type="text/javascript">
      //toString()
      console.log('toString');
      var num1 = 10;
      var numStr1 = num1.toString();
      console.log(numStr1);
      console.log(typeof numStr1);

      //null和undefined這兩個(gè)值沒有toString()方法
      // var num2 = undefined;
      // console.log(num2.toString());//error
      // var num3 = null;
      // console.log(num3.toString());//error

      //NaN 可以
      console.log('NaN');
      var num4 = NaN;
      console.log(num4.toString());//NaN

      //不會(huì)影響到原變量
      console.log('不會(huì)影響到原變量');
      var num5 = 100;
      console.log(typeof num5.toString());
      console.log(typeof num5);

      //String(參數(shù))
      console.log("String(參數(shù))");
      var num6 = 101;
      console.log(String(num6));
      console.log(num6);

      var num7 = null;
      console.log(String(num7));//null
      console.log(String(undefined));//undefined

      // +
      console.log('+');
      var num8 = 100;
      var numStr8 = num8 + "";
      console.log(typeof numStr8);

      var num9 = true;
      var res2 = num9 + "";
      console.log(res2); // true
      console.log(typeof res2); // string

      var num10 = undefined;
      var res3 = num10 + "";
      console.log(res3); // undefined
      console.log(typeof res3); // string

      var num11 = null;
      var res4 = num11 + "";
      console.log(res4); // null
      console.log(typeof res4); // string

      //Number(參數(shù))
      console.log("Number(參數(shù))");
      var str1 = "123";
      var res1 = Number(str1);
      console.log(res1); // 123
      console.log(typeof  res1); // number

      var str2 = "123ab";
      var res2 = Number(str2);
      console.log(res2); // NaN

      var str3 = "";
      var res3 = Number(str3);
      console.log(res3); // 0

      var str4 = "    ";
      var res4 = Number(str4);
      console.log(res4); // 0

      var bool1 = true;
      var res5 = Number(bool1);
      console.log(res5); // 1

      var bool2 = false;
      var res6 = Number(bool2);
      console.log(res6); // 0

      var str5 = null;
      var res7 = Number(str5);
      console.log(res7); // 0

      var str6 = undefined;
      var res8 = Number(str6);
      console.log(res8); // NaN

      //parseInt()
      console.log("parseInt(參數(shù))");
      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,如果第一個(gè)字符不是數(shù)字或者符號(hào)就返回NaN
      console.log(parseInt(""));


      //parseFloat()
      console.log('parseFloat(參數(shù))');

      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

      //對(duì)非String使用parseInt()或parseFloat(), 會(huì)先將其轉(zhuǎn)換為String然后在操作
      var str11 = true;
      var res13 = parseInt(str11); // 這里相當(dāng)于parseInt("true");
      console.log(res13); // NaN
      var res14 = Number(str11);
      console.log(res14); // 1
    </script>
  </body>
</html>

原文鏈接

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末镀迂,一起剝皮案震驚了整個(gè)濱河市丁溅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌探遵,老刑警劉巖窟赏,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異箱季,居然都是意外死亡涯穷,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門规哪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來求豫,“玉大人塌衰,你說我怎么就攤上這事诉稍◎鸺危” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵杯巨,是天一觀的道長蚤告。 經(jīng)常有香客問我,道長服爷,這世上最難降的妖魔是什么杜恰? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮仍源,結(jié)果婚禮上心褐,老公的妹妹穿的比我還像新娘。我一直安慰自己笼踩,他們只是感情好逗爹,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嚎于,像睡著了一般掘而。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上于购,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天袍睡,我揣著相機(jī)與錄音,去河邊找鬼肋僧。 笑死斑胜,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嫌吠。 我是一名探鬼主播伪窖,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼居兆!你這毒婦竟也來了覆山?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤泥栖,失蹤者是張志新(化名)和其女友劉穎簇宽,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吧享,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡魏割,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了钢颂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钞它。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出遭垛,到底是詐尸還是另有隱情尼桶,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布锯仪,位于F島的核電站泵督,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏庶喜。R本人自食惡果不足惜小腊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望久窟。 院中可真熱鬧秩冈,春花似錦、人聲如沸斥扛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽犹赖。三九已至队他,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間峻村,已是汗流浹背麸折。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留粘昨,地道東北人垢啼。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像张肾,于是被迫代替她去往敵國和親芭析。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容