如果 S 包含的不是 R 进制的码元,定义 Z 为 S 的子串,该子串由第一个此类码元 之前 的所有码元组成(例如 parseInt('7+6', 10),+6 会被忽略);否则,定义 Z 为 S
如果 Z 为空,返回 NaN
定义 mathInt 为由 Z 的 R 进制表示的 数学整数 值,将字母 A-Z 和 a-z 用于表示数值从10到35的数字。(但是,如果 R 是 10 且 Z 包含超过 20 个有效数,第20个数后面的每个有效数可能会被0替换,由具体实现决定;如果 R 不是 2,4,8,10,16,32,mathInt 可能是由 Z 的 R 进制表示依赖于具体实现的近似的 数学整数 值)
全局对象:函数属性(parseFloat/parseInt)
parseFloat ( string )
parseFloat
函数产生一个Number
值,该值由将字符串参数的内容解释为十进制数来决定。parseFloat
函数就是 %parseFloat% 固有对象。String
类型,然后判断是否满足 StrDecimalLiteral 的语法!parseFloat('')
结果为NaN
Number
类型值parseInt ( string, radix )
parseInt
函数产生一个 整数 值,该整数值由对string
参数内容根据指定的进制基数radix
的解释来决定。字符串中的前导空格会被忽略。radix
是 undefined 或 0,除非以 0x 或 0X 开始(这种情况radix
被认为是 16),否则radix
被推断为 10。radix
是 16,可能会以 0x 或 0X 开始。parseInt
函数就是 %parseInt% 固有对象。parseInt('7+6', 10)
,+6
会被忽略);否则,定义 Z 为 SNumber
类型值经典面试题
[1, 2, 3].map(parseInt) 输出什么以及为什么?
首先
parseInt
是函数,map
中接受的参数也是函数,所以上述代码可以转为:这样一看,实际是对以下代码的求值:
根据上面
parseInt
算法规定,第二个参数radix
如果等于 0,那么会采用十进制;如果不等于 0,则要看它是不是在 2 ~ 36 范围内。所以:parseInt(1, 0)
实际上是parseInt(1, 10)
parseInt(2, 1)
,1 不在 2 ~ 36 范围内,返回NaN
parseInt(3, 2)
,2 在 2 ~ 36 范围内,所以这里是二进制形式,但是二进制中只有 0 和 1,没有 3,这里 3 不符合二进制规范,所以返回NaN
本篇结束