关于parseInt,很神奇

这是她的两个关键点

  • parseInt首先会将非字符串转为字符串,所以parseInt(1),

    她首先会去把1隐式转换为'1',再显示转为1,对有点智障

  • parseInt会贪婪的解析,直到自己不能转化

先来看定义

parseInt(string, radix);

string 要被解析的值。如果参数不是一个字符串,则将其转换为字符串(使用 ToString 抽象操作)。字符串开头的空白符将会被忽略。 radix 可选 从 2 到 36,表示字符串的基数。例如指定 16 表示被解析值是十六进制数。请注意,10不是默认值!

关于参数radix的值

如果 radixundefined0或未指定的,JavaScript会假定以下情况:

  1. 如果输入的 string以 "0x"或 "0x"(一个0,后面是小写或大写的X)开头,那么radix被假定为16,字符串的其余部分被当做十六进制数去解析。

  2. 如果输入的 string以 "0"(0)开头, radix被假定为8(八进制)或10(十进制)。具体选择哪一个radix取决于实现。ECMAScript 5 澄清了应该使用 10 (十进制),但不是所有的浏览器都支持。因此,在使用 parseInt 时,一定要指定一个 radix

  3. 如果输入的 string 以任何其他值开头, radix10 (十进制)。

如果第一个字符不能转换为数字,parseInt会返回 NaN

关于解析规则

如果 parseInt遇到的字符不是指定 radix参数中的数字,它将忽略该字符以及所有后续字符,并返回到该点为止已解析的整数值parseInt 将数字截断为整数值。 允许前导和尾随空格。

返回值:

从给定的字符串中解析出的一个整数。

或者 NaN,当

  • radix 小于 2 或大于 36 ,或

  • 第一个非空格字符不能转换为数字。

实例

parseInt('123a')
//=>123 只解析到3,a不符合10进制解析规则

注意

  • 请不要将parseInt()和比较混淆

    ('a' < 'b')
    //=>true 在比较的时候,会转化为ASCII

    parseInt('a')
    //=>NaN
    // 在解析的时候就不一样了,这里相当于parseInt('a', 10)
    // 即通过10进制的方式去解析'a',那么会得到NaN(无法解析)的结果

    关于比较的问题,请看[] 关于js的比较 (self)

参考:

[r1] parseInt (MDN)

posted @ 2021-05-19 16:33  那好好  阅读(154)  评论(0)    收藏  举报