引言:leetcode的一道题

仔细想想,使用parseInt()做最为简便
函数定义:(https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/parseInt)
parseInt(string, radix) 将一个字符串 string 转换为 radix 进制的整数, radix 为介于2-36之间的数。
- 参数:
string【要被解析的值。如果参数不是一个字符串,则将其转换为字符串(使用ToString抽象操作)。字符串开头的空白符将会被忽略。】
radix可选【从2到36,代表该进位系统的数字。例如说指定10就等于指定十进位。请注意,通常预设值不是10进位!】- 返回值:
- 从给定的字符串中解析出的一个整数 或 NaN
- 🌰特栗:当
radix小于2或大于36或 第一个非空格字符不能转换为数字 
重点:当参数 radix 不传时该函数的具体行为
如果 radix 是 undefined、0或未指定的,JavaScript会假定以下情况:
- 如果输入的
string以 "0x"或 "0x"(一个0,后面是小写或大写的X)开头,那么radix被假定为16,字符串的其余部分被解析为十六进制数。 - 如果输入的
string以 "0"(0)开头,radix被假定为8(八进制)或10(十进制)。具体选择哪一个radix取决于实现。ECMAScript 5 澄清了应该使用 10 (十进制),但不是所有的浏览器都支持。因此,在使用parseInt时,一定要指定一个 radix。 - 如果输入的
string以任何其他值开头,radix是10(十进制)。 - 对非常大或非常小的数字使用数字时,使用
parseInt截断数字将产生意外结果。parseInt不应替代Math.floor()。如下意外
parseInt(4.7, 10); parseInt(4.7 * 1e22, 10); // 非常大的数值变成 4 parseInt(0.00000000000434, 10); // 非常小的数值变成 4
所以那道leetcode答案为:
var myAtoi = function(str) { let num = parseInt(str, 10); // 故,此处必须传10 if(isNaN(num)) return 0; if(num < Math.pow(-2,31)) return Math.pow(-2,31); if(num > Math.pow(2,31) - 1) return Math.pow(2,31) - 1; return num; };
诗和远方success
浙公网安备 33010602011771号