成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript實(shí)現(xiàn)parseInt()

yzd / 1904人閱讀

摘要:當(dāng)參數(shù)的值為,或沒有設(shè)置該參數(shù)時(shí),會(huì)根據(jù)來判斷數(shù)字的基數(shù)。如果以開頭,那么允許的一個(gè)實(shí)現(xiàn)把其后的字符解析為八進(jìn)制或十六進(jìn)制的數(shù)字。只有字符串中的第一個(gè)數(shù)字會(huì)被返回。開頭和結(jié)尾的空格是允許的。

當(dāng)參數(shù) radix 的值為 0,或沒有設(shè)置該參數(shù)時(shí),parseInt() 會(huì)根據(jù) string 來判斷數(shù)字的基數(shù)。

舉例,如果 string 以 "0x" 開頭,parseInt() 會(huì)把 string 的其余部分解析為十六進(jìn)制的整數(shù)。如果 string 以 0 開頭,那么 ECMAScript v3 允許 parseInt() 的一個(gè)實(shí)現(xiàn)把其后的字符解析為八進(jìn)制或十六進(jìn)制的數(shù)字。如果 string 以 1 ~ 9 的數(shù)字開頭,parseInt() 將把它解析為十進(jìn)制的整數(shù)。

只有字符串中的第一個(gè)數(shù)字會(huì)被返回。

開頭和結(jié)尾的空格是允許的。

function _parseInt (string, radix) {
    if (typeof string !== "string" && typeof string !== "number") return NaN;
    if (radix && (typeof radix !== "number" || /^[1-9]d*.d*|0.d*[1-9]d*$/.test(radix) || radix > 36 || radix < 2)) return NaN;
    string = String(string)
    var rexp = (radix == 10) ? /(-?)([0]?)([0-9]+)/ : /(-?)([0]?[Xx]?)([0-9a-fA-F]+)/,
        a = string.match(rexp),
        sign = a[1],
        rawRadix = a[2],
        rawNum = a[3],
        result = 0,
        strArr = rawNum.split(""),
        len = strArr.length,
        numArr = [];
    if (a && !radix) {
        if ( rawRadix.toUpperCase() === "0X") {
            radix = 16;
        } else if (rawRadix === "0") {
            radix = 8;
        } else {
            radix = 10;
        }
    }
    for (var i = 0; i < len; i++){
        var num;
        var charCode = strArr[i].toUpperCase().charCodeAt(0);
        if(radix <=36 && radix >= 11) {
            if (charCode >= 65 && charCode <= 90) {
                num = charCode - 55;
            } else {
                num = charCode - 48;
            }
        }  else {
            num = charCode - 48;
        }
        if (num < radix) {
            numArr.push(num);
        } else {
            return NaN
        };
    }
    if(numArr.length > 0) {
      numArr.forEach(function(item, j){
          result += item * Math.pow(radix, numArr.length-j-1);
      })
    }
    if(sign === "-"){
      result = -result;
    }
    return result
}

來自MDN關(guān)于parseInt()里面的測試用例

// 以下例子均返回15:
console.log(_parseInt("F", 16));
console.log(_parseInt("17", 8));
console.log(_parseInt("15", 10));
console.log(_parseInt(15.99, 10));
console.log(_parseInt("FXX123", 16));
console.log(_parseInt("1111", 2));
console.log(_parseInt("15*3", 10));
console.log(_parseInt("12", 13));

// 以下例子均返回 NaN:
console.log(_parseInt("Hello", 8)); // Not a number at all
console.log(_parseInt("546", 2));   // Digits are not valid for binary representations

// 以下例子均返回 -15:
console.log(_parseInt("-F", 16));
console.log(_parseInt("-0F", 16));
console.log(_parseInt("-0XF", 16));
console.log(_parseInt(-15.1, 10));
console.log(_parseInt(" -17", 8));
console.log(_parseInt(" -15", 10));
console.log(_parseInt("-1111", 2));
console.log(_parseInt("-15e1", 10));
console.log(_parseInt("-12", 13));
// 下例中也全部返回 17,因?yàn)檩斎氲?string 參數(shù)以 "0x" 開頭時(shí)作為十六進(jìn)制數(shù)字解釋,而第二個(gè)參數(shù)假如經(jīng)過 Number 函數(shù)轉(zhuǎn)換后為 0 或 NaN,則將會(huì)忽略。
console.log(_parseInt("0x11", 16));
console.log(_parseInt("0x11", 0));
console.log(_parseInt("0x11"));

// 下面的例子返回 224
console.log(_parseInt("0e0",16));

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/84780.html

相關(guān)文章

  • 怪異的JavaScript系列(二)

    摘要:函數(shù)不是函數(shù)這是一個(gè)低版本的,,或則。對應(yīng)的進(jìn)制數(shù)為。因此最安全的方法是調(diào)用的時(shí)候指定進(jìn)制。它會(huì)將字符串形式的整數(shù)轉(zhuǎn)換為,非字符串的,,和也會(huì)被轉(zhuǎn)換。對于不能轉(zhuǎn)換的值,返回。而瀏覽器主要指系列,其實(shí)已經(jīng)沒有必要支持這個(gè)特性了。 譯者按: JavaScript有很多坑,經(jīng)常一不小心就要寫bug。 原文: What the f*ck JavaScript? 譯者: Fundebug ...

    YacaToy 評論0 收藏0
  • JavaScript Puzzlers! 解惑(一):為什么 ["1", &qu

    摘要:第一題為的返回值。返回值其中的每個(gè)元素均為關(guān)聯(lián)的原始數(shù)組元素的回調(diào)函數(shù)返回值的新數(shù)組。修改數(shù)組對象數(shù)組對象可由回調(diào)函數(shù)修改。方法啟動(dòng)后的條件元素是否傳遞給回調(diào)函數(shù)在數(shù)組的原始長度之外添加元素。 JavaScript Puzzlers! 被稱為 javascript 界的專業(yè)八級測驗(yàn),感興趣的 jser 可以去試試。 我試了一下, 36 道題只做對了 19 道, 算下來正確率為 53%,...

    k00baa 評論0 收藏0
  • JavaScript學(xué)習(xí)筆記之?dāng)?shù)組(三)

    摘要:學(xué)習(xí)筆記之?dāng)?shù)組二輸出什么為什么有三個(gè)參數(shù)數(shù)組元素,元素索引,數(shù)組本身有兩個(gè)參數(shù)元素本身以及進(jìn)制語法參數(shù)可選。表示要解析的數(shù)字的基數(shù)。如果該參數(shù)小于或者大于,則將返回。當(dāng)參數(shù)的值為或沒有設(shè)置該參數(shù)時(shí),會(huì)根據(jù)來判斷數(shù)字的基數(shù)。 JavaScript學(xué)習(xí)筆記之?dāng)?shù)組(二) 1.[1,2,3].map(parseInt) 輸出什么,為什么? [1,2,3].map(parseInt)//[1,N...

    YPHP 評論0 收藏0
  • JavaScript 轉(zhuǎn)換數(shù)字為整數(shù)的方法

    摘要:另外自己寫代碼測試了下和的速度,比較結(jié)果如下位操作轉(zhuǎn)換整數(shù)的原理參考上面對于位操作的說明,點(diǎn)擊下面鏈接有這樣一段話中,數(shù)字存儲(chǔ)是雙進(jìn)度位浮點(diǎn)數(shù)。但是位操作卻會(huì)把要操作的運(yùn)算元當(dāng)做位帶符號的整數(shù)。因此進(jìn)行位操作時(shí),會(huì)自動(dòng)把數(shù)字先轉(zhuǎn)換為整數(shù)。 本文將會(huì)列舉并說明JavaScript 把一個(gè)number(或者numerical的對象)轉(zhuǎn)換成一個(gè)整數(shù)相關(guān)方法。 使用parseInt parse...

    YanceyOfficial 評論0 收藏0
  • 你真的了解javascript嗎?(一)

    摘要:表示要解析的數(shù)字的基數(shù)?;卣{(diào)函數(shù)接收四個(gè)參數(shù),依次是通過上一次調(diào)用回調(diào)函數(shù)獲得的值。如果向方法提供,則在首次調(diào)用函數(shù)時(shí),為。當(dāng)前數(shù)組元素的值。 原題出處:JavaScript Puzzlers!當(dāng)初以為不過是一些小題目,結(jié)果做到懷疑人生,都要懷疑可能我javascript白學(xué)了。讀者可以去試試。 不多說,直接上題: 第一題 [1, 2, 3].map(parseInt) 不要被套路,這...

    whatsns 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<