可以避免在JavaScript中对isNaN()函数进行内部数字转换
Is possible avoid internal number conversion on isNaN() function in JavaScript?
正如问题的标题所说,我希望避免isNaN()函数的内部数字转换。
isNaN()函数试图将输入参数转换为调用number()函数的数字。
例如,如果用户在输入文本中放入值false
,并使用isNaN()函数进行测试,以查看输入数据是否"不是数字",则结果将为"false",因为number()函数会将值false转换为0。
那么,有可能这样做吗?例如,使用杂注或其他什么?
谢谢!
Number.isNaN()
函数的工作方式与全局isNaN()
不同。Number.isNaN()
不执行类型强制。
现在,理解概念NaN
的含义很重要。它不仅仅意味着"不是数字的东西"。这是关于浮点系统,特别是那些没有任何意义的值。如果你想检查某个未知值是否是数字,有更好的方法。isNaN
函数实际上是关于数字的。
一个简单的测试:
function isNumberReally( n ) {
return n === Number(n);
}
它使用Number构造函数来执行转换(如果可以的话)。然后,它使用无转换===
运算符检查结果是否与原始结果相比较。只有真正的原始数才能通过测试;像"123"这样的字符串不会。
确实没有办法阻止isNan
进行类型转换;Javascript会自动执行此操作。但是,您可以尝试根据要检查的字符串创建一个新的Number()
,如下所示:
var a=false;
isNaN(Number(String(a)));//returns true;
或者你可以检查某个东西是否等于它的等价数字,比如
return num===Number(num);
其在检查等价性时基本上不转换类型。
如果您对其他事物持开放态度,您可以始终使用typeof num==="number";
isNaN
函数只在已经是数字类型的东西上可靠地工作。如果你给它任何其他类型的,它会给出与你自然预期不一致的结果。
将字符串解析为一个数字,然后可以对其使用isNaN
函数。解析可以得到一个数字或值NaN
(也是数字类型),isNaN
可以从中得到一致的结果。示例:
if (isNaN(parseFloat(textbox.value))) {
alert('oops');
}
但是,请注意,解析只会愉快地解析部分值。如果有人输入类似123abc
的值,则parseFloat
调用将返回数字123
。
如果您希望输入只包含一个数字,而不包含其他内容,则需要对其进行验证。例如,使用只接受数字的正则表达式:
if (/^'d+$/.test(textbox.value)) {
alert("fine");
}
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- 通过单击表单中的按钮,在代码生成中使用javascript生成字母数字代码
- 测试索引值是否等于某个数字的倍数
- 将数字转换为一定数量的硬币
- 调用函数内部的函数
- 如何使用js将SNAPSHOT内部版本号转换为3位数的整数
- 键入最后一位数字后自动提交
- 如何在javascript中迭代数字列表
- 在phonegap应用程序内部重定向不起作用
- 使用此选项选择父类内部的类
- Javascript逻辑运算符和字符串/数字
- 访问JSON对象内部的数组元素
- 从模块内部访问Express装载路径
- 如何在javascript中获得与特定数字相等的随机数
- 可以避免在JavaScript中对isNaN()函数进行内部数字转换
- 隐藏所有带有与数字“0”匹配的文本或内部HTML的“a”元素,或使用javascript或jQuery的自定义值
- 使用 jquery 的动态内部文本中的数字总和
- 添加数字使用内部函数- JavaScript
- JavaScript -内部的JavaScript排序方法对数字数据进行排序- True或False
- Twilio:如果";数字";内部<拨号>动词不是";完成"