<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          大概80%的前端小伙伴都不懂ParseInt是這么用的

          共 1638字,需瀏覽 4分鐘

           ·

          2021-11-05 14:51

          作者:伯約同學(xué)
          來源:SegmentFault 思否社區(qū)

          說到JavaScript中的parseInt函數(shù),不少同學(xué)可能覺得這個函數(shù)比較簡單,就是一個把字符串轉(zhuǎn)成整數(shù)的方法,第一時間想到的例子是這樣的:
          parseInt('1') // 1
          parseInt('0.1') // 0
          parseInt('8.8') // 8

          熟不知,parseInt函數(shù)可傳入兩個參數(shù):
          第一個是需要被解析的字符串(如果參數(shù)不是一個字符串,則將其轉(zhuǎn)換為字符串(使用 ToString 抽象操作)。字符串開頭的空白符將會被忽略。)
          第二個表示要解析的數(shù)字的基數(shù)。(從 2 到 36,表示字符串的基數(shù)。例如指定 16 表示被解析值是十六進制數(shù)。請注意,10不是默認值!)
          下面我們來看幾個例子:
          parseInt('11',2) // 3
          parseInt("1f",16) // 31
          parseInt(0.000000008) // 8

          兩個比較好理解,parseInt函數(shù)將第一個參數(shù)轉(zhuǎn)成對應(yīng)字符串,再按照第二個參數(shù)的進制進行輸出。
          但是第三個為什么會輸出一個整數(shù)8而不是0呢?
          且看第一條:如果一個參數(shù)不是字符串,則將其轉(zhuǎn)換為字符串。
          我們打印一下:
          0.000008.toString() // '0.000008'
          0.0000008.toString() // '8e-7'

          可以看到,將一個很小的數(shù)轉(zhuǎn)成字符串之后,就成了用e字符進行表示了~~
          當(dāng)然,如果一個數(shù)太大的話,也會使用到e字符。
          這個時候,parseInt函數(shù)發(fā)現(xiàn),哎,這個e字符我不認識啊,那怎么辦呢?截斷!’e’前面的我轉(zhuǎn)一下完事了,后面的不管啦就。
          所以,在處理非常大或非常小的數(shù)時,會有一些意想不到的情況發(fā)生。
          再來關(guān)注一下第二點,即第二個參數(shù)的基數(shù)默認值并不是10。那我怎么計算呢?
          搞兩個簡單的例子說明一下:
          parseInt('0xF') // 15
          parseInt('-0xA') // -10

          對照MDN上的解釋,可以看得明明白白:
          1、parseInt 可以理解兩個符號。+ 表示正數(shù),- 表示負數(shù)(從ECMAScript 1開始)。它是在去掉空格后作為解析的初始步驟進行的。如果沒有找到符號,算法將進入下一步;否則,它將刪除符號,并對字符串的其余部分進行數(shù)字解析。
          2、如果 radix 是 undefined、0或未指定的,JavaScript會假定以下情況:
          3、如果輸入的 string以 “0x“或 “0x“(一個0,后面是小寫或大寫的X)開頭,那么radix被假定為16,字符串的其余部分被當(dāng)做十六進制數(shù)去解析。
          4、如果輸入的 string以 “0“(0)開頭, radix被假定為8(八進制)或10(十進制)。具體選擇哪一個radix取決于實現(xiàn)。ECMAScript 5 澄清了應(yīng)該使用 10 (十進制),但不是所有的瀏覽器都支持。因此,在使用 parseInt 時,一定要指定一個 radix。/4、如果輸入的 string 以任何其他值開頭, radix 是 10 (十進制)。

          如果第一個字符不能轉(zhuǎn)換為數(shù)字,parseInt會返回 NaN。


          點擊左下角閱讀原文,到 SegmentFault 思否社區(qū) 和文章作者展開更多互動和交流,掃描下方”二維碼“或在“公眾號后臺回復(fù)“ 入群 ”即可加入我們的技術(shù)交流群,收獲更多的技術(shù)文章~

          - END -

          瀏覽 26
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  三级视频国产 | 370p日韩欧美亚洲精品 | 91免费片| 日韩免费视频 | 激情乱伦图片 |