gpt4 book ai didi

javascript - 寻找替代方法来进行 isNaN 测试

转载 作者:行者123 更新时间:2023-11-28 15:59:10 25 4
gpt4 key购买 nike

我正在寻找一种替代方法来进行 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”类型。您也可以使用“Number”构造函数,但不能作为构造函数:

var numeric = Number( someString );

如果字符串不是一个完全有效且不带尾随垃圾的数字,则其中任何一个都会给您一个 NaN

编辑 - 如果您只是想要一个安全的“给我一个数字”转换器:

function toNumber( value, ifGarbage ) {
value = +value;
return isNaN(value) ? ifGarbage : value;
}

var num1 = toNumber( str1, -1 );

关于javascript - 寻找替代方法来进行 isNaN 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17577728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com