为何isFinite('0/2')返回false,isFinite(0/2)返回true?
为什么isFinite('0/2')和isFinite(0/2)返回结果不同?
首先得明确isFinite()的核心逻辑:它会先把传入的参数通过Number()方法转换为数值,再判断转换后的结果是不是有限的数值(既不是Infinity、-Infinity,也不是NaN)。
咱们拆解两个场景:
- 当传入
0/2时,这是一个JavaScript表达式,会先被计算出结果:0/2 = 0,0是有限数值,所以isFinite(0)自然返回true。 - 当传入字符串
'0/2'时,Number()转换这个字符串会得到NaN——因为'0/2'不是合法的数字格式(只有像'123'、'1e9'这种纯数字或科学计数法的字符串才能被转成有效数值),而isFinite(NaN)会返回false。
再看你给出的'1e9'例子,'1e9'是合法的科学计数法数字字符串,Number('1e9')会得到1000000000,是有限值,所以和数值1e9的返回结果一致,都是true。
内容的提问来源于stack exchange,提问作者Marcus
相关产品推荐
相关产品推荐

