Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 寻找做isNaN测试的替代方法_Javascript_Parseint - Fatal编程技术网

Javascript 寻找做isNaN测试的替代方法

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

我正在寻找另一种方法来做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 


首先,我认为
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)
将调用传入的任何函数,传递(有效)数字。