仅当字符串是数字时才将字符串转换为数字的Javascript

仅当字符串是数字时才将字符串转换为数字的Javascript,javascript,Javascript,如果我不知道字符串值是否为有效数字,如何将字符串转换为数字。如果字符串无效,我希望保留该字符串 示例 "0" -> 0 "0.5" -> 0.5 "100" -> 100 "abc" -> "abc" // remains a string " " -> " " // remains an empty string "-1" -> -1 // I'd like to convert negative numbers too 我试过了 var str = "

如果我不知道字符串值是否为有效数字,如何将字符串转换为数字。如果字符串无效,我希望保留该字符串

示例

"0" -> 0
"0.5" -> 0.5
"100" -> 100
"abc" -> "abc" //  remains a string
" " -> " " // remains an empty string
"-1" -> -1 // I'd like to convert negative numbers too
我试过了

var str = " ";
var num = +str // num = 0
var num = Number(str) // num = 0
var num = parseInt(str) // num = NaN

看来我的问题是空间。我曾考虑使用
parseInt
,但我认为在Javascript中使用
NaN
作为一个值可能不是一个好主意,而让字符串保持原样会更好。

您可以创建一个自定义函数

函数customParseInt(str){
常量解析=+str;
返回str.trim();
}
console.log(customParseInt(“0”));
console.log(customParseInt(“0.5”));
console.log(customParseInt(“100”));
console.log(customParseInt(“abc”));
console.log(customParseInt(“”);
日志(customParseInt(“5ab”);

log(customParseInt(“-1”)您可以使用
=
检查转换后的int和字符串是否相同

例如,您有两个字符串

var a = '123', b = '111x';
var intA = parseInt(a), intB = parseInt(b);
if(a == intA){
    console.log(a is a valid integer string); // this gets printed
}else{
    console.log('a is not a valid integer string');
}

if(b == intB){
    console.log(b is a valid integer string); 
}else{
    console.log('b is not a valid integer string');// this gets printed
}

使用如下所示的“| |”运算符

var num=parseInt(str)| num


如果有效,它将返回与“str”等价的整数,否则将保持原样。

您需要先进行一些简单的检查,然后使用
数字(x)
,因为它将处理小数点数字等
parseInt
顾名思义,它只处理整数

这里有一个例子

function toNumberIfNumber(convertee) {
  const prep = convertee.trim();
  if (prep === "") {
      return convertee;
  }

  const num = Number(convertee);
  if (isNaN(num)) {
    return convertee;
  } else {
    return num;
  }
}

console.log(toNumberIfNumber("0"));   //0
console.log(toNumberIfNumber("0.5")); //0.5
console.log(toNumberIfNumber("100")); //100
console.log(toNumberIfNumber("abc")); //"abc"
console.log(toNumberIfNumber(" "));   //" "

您可以检查字符串的数值是否等于该值

var数组=[“0”、“0.5”、“100”、“abc”和“”];
log(array.map(a=>(+a.toString()==a?+a:a))

.as控制台包装{max height:100%!important;top:0;}
创建一个将使用
parseInt
的自定义函数。如果结果是
NaN
返回字符串,则可以添加一个简单的
If
条件。否?
0.5
不是整数…?应避免使用==对===。此外,在使用parseInt时,始终使用基数@只有在不理解类型强制时才应避免使用VedranMaricevic
==
。@RobG OP没有提供有关科学符号的详细信息OP甚至不区分浮点和整数(问题要求整数,但随后使用0.5作为示例)@Weedoze使用
parseFloat
而不是
parseInt
。它也解析浮点值,如果num=“0”,它不只是一个字符串吗?它是一个wunderbar,danke!
function toNumberIfNumber(convertee) {
  const prep = convertee.trim();
  if (prep === "") {
      return convertee;
  }

  const num = Number(convertee);
  if (isNaN(num)) {
    return convertee;
  } else {
    return num;
  }
}

console.log(toNumberIfNumber("0"));   //0
console.log(toNumberIfNumber("0.5")); //0.5
console.log(toNumberIfNumber("100")); //100
console.log(toNumberIfNumber("abc")); //"abc"
console.log(toNumberIfNumber(" "));   //" "