Javascript 寻找做isNaN测试的替代方法
我正在寻找另一种方法来做isNaN测试 我的原始代码是这样的。代码可以工作,但我注意到num1改变了类型,这很难看Javascript 寻找做isNaN测试的替代方法,javascript,parseint,Javascript,Parseint,我正在寻找另一种方法来做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=par
// 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
首先,我认为
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”类型。您也可以使用“Number”构造函数,但不能将其用作构造函数:
var numeric = Number( someString );
如果字符串不是一个没有尾随垃圾的完全有效数字,则这两个选项中的任何一个都将为您提供一个NaN
编辑-如果您只是想要一个安全的“给我一个数字”转换器:
function toNumber( value, ifGarbage ) {
value = +value;
return isNaN(value) ? ifGarbage : value;
}
var num1 = toNumber( str1, -1 );
首先,我认为
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”类型。您也可以使用“Number”构造函数,但不能将其用作构造函数:
var numeric = Number( someString );
如果字符串不是一个没有尾随垃圾的完全有效数字,则这两个选项中的任何一个都将为您提供一个NaN
编辑-如果您只是想要一个安全的“给我一个数字”转换器:
function toNumber( value, ifGarbage ) {
value = +value;
return isNaN(value) ? ifGarbage : value;
}
var num1 = toNumber( str1, -1 );
您所说的“更改类型”是什么意思?
typeof-NaN==='number'
num1=isNaN(+str1)-1:+str1;或者,如果您不喜欢三元,num1=isNaN(+str1)&&-1 | |+str1;当然,isNan返回一个布尔值。这就是为什么在if语句中使用它。parseInt返回一个数字。这种“类型更改”并不比(a==b)num1=5这样的代码差。也使用布尔值定义int。isNAN()当parseInt()时,code>将始终返回布尔值如果可能,代码>将返回int。它们是用于返回这些特定类型的函数<代码>数字()
将始终返回一个数字或NaN
,这就是为什么要使用isNaN()代码>你所说的“更改类型”是什么意思?typeof NaN===='number'
num1=isNaN(+str1)-1:+str1;或者,如果您不喜欢三元,num1=isNaN(+str1)&&-1 | |+str1;当然,isNan返回一个布尔值。这就是为什么在if语句中使用它。parseInt返回一个数字。这种“类型更改”并不比(a==b)num1=5
这样的代码差。也使用布尔值定义int。isNAN()当parseInt()时,code>将始终返回布尔值如果可能,代码>将返回int。它们是用于返回这些特定类型的函数<代码>数字()
将始终返回一个数字或NaN
,这就是为什么要使用isNaN()代码>你能给我解释一下f(s)到底是什么吗;是吗?@WubbeWubbeWubbeWubbeWubbeWubbeWubbeWubbeWubbeWubbeWubbeWubbeWubbeWubbeWubbeWubbeWubbeWubbeWubbeWubbeWubbeWubbeWubbeW。f(s)
只会调用传入的任何函数,传递(有效)数字;是吗?@WubbeWubbeWubbeWubbeWubbeWubbeWubbeWubbeWubbeWubbeWubbeWubbeWubbeWubbeWubbeWubbeWubbeWubbeWubbeWubbeWubbeWubbeWubbeW。f(s)
将调用传入的任何函数,传递(有效)数字。