引言: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