手写 parseInt

function parseInt(s, radix = 10) {
    // 不是string类型立刻NaN
    if (typeof s !== 'string') {
        return NaN;
    }
    // 进制必须为2到36的数字
    if (typeof radix !== 'number' || radix < 2 || radix > 36) {
        return NaN;
    }
    // 结果初始值为0
    let result = 0;
    // 循环字符串中的每一个字符转为 Unicode 编码
    for (let i = 0; i < s.length; i += 1) {
        let c = s.charCodeAt(i);
        // 小写大写字母转换为数字
        if (c >= 97) {
            c -= 87;    // - 'a' + 10
        } else if (c >= 65) {
            c -= 55;    // - 'A' + 10
        } else {
            c -= 48;    // - '0'
        }
        // 如果字母转化后的值大于进制数,则跳出循环返回之前的结果
        if (c >= radix) {
            if (i === 0) {
                return NaN;
            }
            break;
        }
        // 结果累加,和进制相关
        result = (result * radix) + c;
    }

    return result;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章