Pau*_*ica 51 javascript string validation numbers
看到这个问题:JavaScript中是否有(内置)方法来检查字符串是否为有效数字?并且:jsperf,提出的方法之一就是这样(比照):
var a = "123"
var b = "123b"
if ( +a === +a ) // true
if ( +b === +b ) // false
Run Code Online (Sandbox Code Playgroud)
这个逻辑如何在JavaScript 内部工作以实现这一目标?
我的问题不是如何检查字符串是否是有效数字 - 这已在这里得到解答:验证JavaScript中的十进制数 - IsNumeric().我想了解该声明的+a === +a工作原理.
Que*_*tin 64
+ 将值转换为数字.
a转换为123和123 === 123.
b转换为NaN但是NaN !== NaN(因为根据相等规则的步骤4a,NaN它永远不会等于另一个).NaN
Jam*_*lly 16
+这里的运营商被称为Unary Plus.
一元加运算符在其操作数之前,并计算其操作数,但尝试将其转换为数字(如果尚未).
+"123"作为123.
+a === +a
-> +"123" === +"123"
-> 123 === 123
-> true
Run Code Online (Sandbox Code Playgroud)
+"123b"评估为NaN(非数字),因为b无法使用Unary Plus转换字符,因为没有任何前缀(如0x十六进制),Unary Plus将假定值为十进制(0-9).NaN是一个特殊情况,它不会与任何东西进行比较,包括它自己:
NaN === NaN
-> false
NaN !== NaN
-> true
Run Code Online (Sandbox Code Playgroud)
因此,我们的+b测试用例失败了:
+b === +b
-> +"123b" === +"123b"
-> NaN === NaN
-> false
Run Code Online (Sandbox Code Playgroud)
如果您希望两者都评估为true,我们可以isNaN()在最后添加一个调用:
if ( +a === +a || isNaN(+a) )
if ( +b === +b || isNaN(+b) )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1765 次 |
| 最近记录: |