js中parseInt函数理解修正

博客分类: node

js中parseInt函数理解修正

起因

在刷 leetcode 的第八题字符串转整数时,遇到一个有趣的答案:

/**
 * @param {string} str
 * @return {number}
 */
var myAtoi = function(str) {
    let result = parseInt(str);
    if (String(result) === 'NaN') {
        return 0;
    }
    if (result > 0) {
        return Math.min(result, Math.pow(2, 31) - 1);
    } else {
        return Math.max(result, Math.pow(2, 31) * -1);
    }
};

在看上述代码时,产生了疑问:parseInt 在字符串转整数时,能过滤掉非整数的字符???

以前认为:parseInt 只是把整数型字符串转成数字类型,如果有非整数型字符,则返回 NaN

经过官网查询后,修正对 parseInt 以前的理解

parseInt(string, radix) string 为字符串,radix 为介于 2-36 之间的数

  1. string 参数:如果参数不是一个字符串,则将其转换为字符串(使用 ToString 抽象操作)。字符串开头的空白符将会被忽略

  2. radix 参数:一个介于 2 和 36 之间的整数(数学系统的基础),通常将值默认为 10。

  3. 如果 parseInt 遇到了不属于 radix 参数所指定的基数中的字符那么该字符和其后的字符都将被忽略。接着返回已经解析的整数部分。parseInt 将截取整数部分。开头和结尾的空白符允许存在,会被忽略。

  4. parseInt 不应该用作 Math.floor()的替代品。

  5. 如果第一个字符不能被转换成数字,parseInt 返回 NaN。