在下面的代码中, a!= b 与==
进行比较时。我最初的想法是,JavaScript将使用与==
相同的parseFloat转换。任何人都可以解释实际发生的事情,因为我有点困惑。解析时 b = 129 ,因此看起来parseFloat将解析为第一个非数字字符。
var a = '129t3.98';
var b;
b = parseFloat(a);
Here is the sample script fiddle.
我希望使用此功能组合一个非常简单的isNumeric()
函数,但我想先了解它。
答案 0 :(得分:1)
正如您所注意到的,parseFloat
函数将解析满足数字文字语法的第一个字符。 From the spec:
让 numberString 成为 trimmedString 的最长前缀,它可能是 trimmedString 本身,它满足 StrDecimalLiteral <的语法/ em>的
但是,abstract equality comparison algorithm(==
所做的)不遵循相同的规则:
如果Type( x )是String而Type( y )是Number,则返回比较结果ToNumber( x )= = y
以下是内部ToNumber
操作所说的内容:
如果语法不能将String解释为 StringNumericLiteral 的扩展,则ToNumber的结果为NaN。
因此,当您尝试将字符串与解析后的字符串进行比较时,您实际上是在比较数字NaN
。
答案 1 :(得分:0)
当你给出a = b时,b的值变为a,没有任何转换。
当您将值指定为a = parseFloat(b)时,如果b的类型为string,则a将为int类型。
但如果指定了a = b,那么a&amp; b都是相同的类型。
if,2->int, '2' -> string
2=='2' (true)
2 === '2' (false)
通过观察上述转换,您可以相应地处理您的代码。