JavaScript如何为==进行类型转换?

时间:2013-04-15 15:29:29

标签: javascript type-conversion equality

在下面的代码中, a!= b ==进行比较时。我最初的想法是,JavaScript将使用与==相同的parseFloat转换。任何人都可以解释实际发生的事情,因为我有点困惑。解析时 b = 129 ,因此看起来parseFloat将解析为第一个非数字字符。

var a = '129t3.98';
var b;

b = parseFloat(a);

Here is the sample script fiddle.

我希望使用此功能组合一个非常简单的isNumeric()函数,但我想先了解它。

2 个答案:

答案 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)

通过观察上述转换,您可以相应地处理您的代码。