1

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

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

b = parseFloat(a);

这是示例脚本小提琴。

我想用这个组合一个非常简单的isNumeric()函数,但我想先理解它。

4

2 回答 2

1

正如您所注意到的,该parseFloat函数将解析到满足数字文字语法的第一个字符。从规格

numberString为trimmedString的最长前缀,它可能是trimmedString本身,满足StrDecimalLiteral的语法。

但是,抽象相等比较算法(就是这样==做的)不遵循相同的规则:

如果 Type( x ) 是 String 并且 Type( y ) 是 Number ,则返回比较结果 ToNumber( x ) == y

这是内部ToNumber操作必须说的:

如果语法不能将 String 解释为StringNumericLiteral的扩展,则 ToNumber 的结果为 NaN。

因此,当您尝试将您的字符串与解析它产生的数字进行比较时,您实际上是在比较数字NaN

于 2013-04-15T15:33:57.333 回答
0

当您给出 a=b 时,b 的值将变为 a,无需任何转换。

当您将值分配为 a=parseFloat(b) 时,如果 b 是字符串类型,那么 a 将是 int 类型。

但如果 a= b 被赋值,那么 a & b 都是相同的类型。

if,2->int, '2' -> string 
2=='2'   (true)
2 === '2' (false)

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

于 2013-04-15T15:37:49.147 回答