首页 > 解决方案 > 使用条件运算符检查某些值并将其转换为数字

问题描述

给定一个存储在变量“givenValue”中的字符串。如果都是数字,则将字符串转换为数字

(例如,'11' 转换为 11,'a1' 转换为 'a1')

并将其分配给变量 'value':

const value = givenValue - 0 === NaN ? givenValue : givenValue - 0;

但输出不是我所期望的:

const givenValue = 'a1';
console.log(value); // NaN

const givenValue = '1';
console.log(value); // 1

似乎在检查“if”条件时重新分配了“givenValue”的值,或者条件检查不起作用。

标签: javascriptnumbersconditional-operator

解决方案


不是完全数字但具有数字字符的字符串很可能会返回一个数字,而不是NaN在许多情况下 - 请参阅该链接以获取有关算法工作原理的完整描述。可以说,它有点复杂,不是你要找的。(例如,您希望'123e456'失败,但实际上这会给您Infinity。空白也将被允许。)(此外,=== NaN检查将始终返回false,因为NaN不等于任何东西)

相反,使用正则表达式来检查字符串是否只包含数字:

const value = /^\d+$/.test(givenValue) ? Number(givenValue) : givenValue;

如果您还想包括可能的小数,则添加一组可选的.后跟数字:

const value = /^\d+(?:\.\d+)?$/.test(givenValue) ? Number(givenValue) : givenValue;
//                 ^^^^^^^^^^

推荐阅读