国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript實現parseInt()

yzd / 1901人閱讀

摘要:當參數的值為,或沒有設置該參數時,會根據來判斷數字的基數。如果以開頭,那么允許的一個實現把其后的字符解析為八進制或十六進制的數字。只有字符串中的第一個數字會被返回。開頭和結尾的空格是允許的。

當參數 radix 的值為 0,或沒有設置該參數時,parseInt() 會根據 string 來判斷數字的基數。

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

只有字符串中的第一個數字會被返回。

開頭和結尾的空格是允許的。

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關于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,因為輸入的 string 參數以 "0x" 開頭時作為十六進制數字解釋,而第二個參數假如經過 Number 函數轉換后為 0 或 NaN,則將會忽略。
console.log(_parseInt("0x11", 16));
console.log(_parseInt("0x11", 0));
console.log(_parseInt("0x11"));

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/84780.html

相關文章

  • 怪異的JavaScript系列(二)

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

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

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

    k00baa 評論0 收藏0
  • JavaScript學習筆記之數組(三)

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

    YPHP 評論0 收藏0
  • JavaScript 轉換數字為整數的方法

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

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

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

    whatsns 評論0 收藏0

發表評論

0條評論

yzd

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<