正在寻找另一种方法来进行isNaN测试
looking for alternative way to do isNaN test
我正在寻找一种替代方法来进行isNaN测试
我原来的代码是这样的。代码是有效的,但我注意到num1改变了类型,这是一个丑陋的
// example 1: num1 changes type
num1 = parseInt(str1, 10);
if isNaN(num1){num1=-1;}
我把它改成了这个,但这个使用了重复的代码
// example 2: duplicate code
if (isNaN(parseInt(str1,10))){num1=-1;}
else {num1=parseInt(str1,10);}
起初,我想添加一个额外的变量来存储parseInt(str1,10),但该变量也会更改类型,因此实际上与示例1相同。
有没有示例1或2的替代方案?
我指的是这种
console.log(typeof(isNaN("123"))); // boolean
console.log(typeof(isNaN("abc"))); // boolean
console.log(typeof(parseInt("123", 10))); // number
console.log(typeof(parseInt("abc", 10))); // number
console.log(typeof(Number("123"))); // number
console.log(typeof(Number("abc"))); // number
console.log(Number("123")); // 123
console.log(Number("abc")); // NaN
首先,我建议parseInt()
不是最佳选择。例如:
var x = parseInt("123hello world how are you today?", 10);
将"x"设置为123,并简单地忽略后面的垃圾。
如果你真的想避免中间的临时值,你可以设置一种功能性的方法来做到这一点:
function ifNumeric( s, f ) {
s = +s;
if (!isNaN(s)) f(s);
}
ifNumeric( someString, function( n ) { /* whatever, with "n" being a number */ } );
但这似乎有点极端。但请注意,在该示例中,+
运算符用于将变量的值强制为"数字"类型。您也可以使用"Number"构造函数,但不能用作构造函数:
var numeric = Number( someString );
如果字符串不是一个完全有效且没有尾部垃圾的数字,那么这两种方法中的任何一种都会给您一个NaN
。
编辑—如果你只是想要一个安全的"给我一个号码"转换器:
function toNumber( value, ifGarbage ) {
value = +value;
return isNaN(value) ? ifGarbage : value;
}
var num1 = toNumber( str1, -1 );
相关文章:
- 模糊事件的Javascript测试
- 我的单元测试选项是什么
- 测试索引值是否等于某个数字的倍数
- 在localhost Dev Box上测试JSONP请求的最佳方式
- 测试数组中每个项的内容
- 测试Angular Service解决错误回调中的promise
- 使用Jest测试React Native应用程序
- 为函数代码编写测试
- 如何在Angular单元测试中从另一个控制器的rootScope将方法添加到rootScope中
- 如何使用JS/nightwatchjs并行运行多个测试
- 使用量角器的当前url单元测试的getTitle
- 茉莉花宝石-耙茉莉花:ci dons't运行测试
- JavaScript滚动脚本-在测试中激发,而不是在开发站点上
- AngularJS指令单元测试中未定义的函数
- 一个密码测试程序,如果存在空格,它会提醒用户
- 测试角度解析方法
- Protractor:在Iframe中测试非角度应用程序
- 简单类测试未通过
- 如何在Ionic2测试版中包含Ionic.io服务
- 正在寻找另一种方法来进行isNaN测试