可能的重复:
在 Javascript 中截断字符串的前导零
在 Javascript 中从数字中删除前导零的最简单且跨浏览器兼容的方法是什么?
例如,如果我有一个文本框值为 014 或 065,它应该只返回 14 或 65
可能的重复:
在 Javascript 中截断字符串的前导零
在 Javascript 中从数字中删除前导零的最简单且跨浏览器兼容的方法是什么?
例如,如果我有一个文本框值为 014 或 065,它应该只返回 14 或 65
我们可以使用四种方法进行这种转换
const numString = "065";
//parseInt with radix=10
let number = parseInt(numString, 10);
console.log(number);
// Number constructor
number = Number(numString);
console.log(number);
// unary plus operator
number = +numString;
console.log(number);
// conversion using mathematical function (subtraction)
number = numString - 0;
console.log(number);
对于原始类型Number
,最安全的最大值是2 53-1 ( Number.MAX_SAFE_INTEGER
)。
console.log(Number.MAX_SAFE_INTEGER);
现在,让我们考虑数字字符串'099999999999999999999'并尝试使用上述方法对其进行转换
const numString = '099999999999999999999';
let parsedNumber = parseInt(numString, 10);
console.log(`parseInt(radix=10) result: ${parsedNumber}`);
parsedNumber = Number(numString);
console.log(`Number conversion result: ${parsedNumber}`);
parsedNumber = +numString;
console.log(`Appending Unary plus operator result: ${parsedNumber}`);
parsedNumber = numString - 0;
console.log(`Subtracting zero conversion result: ${parsedNumber}`);
所有的结果都将是不正确的。
这是因为在转换时, numString 值大于Number.MAX_SAFE_INTEGER
。IE,
99999999999999999999 > 9007199254740991
这意味着在假设string
可以转换为number
类型的情况下执行的所有操作都失败了。
对于大于2 53 的数字,BigInt
最近添加了原语。检查BigInt
此处的浏览器兼容性。
转换代码将是这样的。
const numString = '099999999999999999999';
const number = BigInt(numString);
parseInt
?如果 radix 未定义或为 0(或不存在),JavaScript 会假设如下:
究竟选择哪个基数取决于实现。ECMAScript 5 指定使用 10(十进制),但并非所有浏览器都支持它。
为此,在使用 parseInt 时总是指定一个基数
正则表达式:
"014".replace(/^0+/, '')
目前尚不清楚您为什么要这样做。如果你想获得正确的数值,你可以使用一元+
[docs]:
value = +value;
如果您只想格式化文本,那么正则表达式可能会更好。这取决于我要说的您正在处理的value观。如果你只有整数,那么
input.value = +input.value;
也很好。当然,它也适用于浮点值,但取决于点后有多少位数字,将其转换为数字并返回到字符串可以(至少用于显示)删除一些。