175

可能重复:
在 Javascript 中截断字符串的前导零

从 Javascript 中的数字中删除前导零的最简单且跨浏览器兼容的方法是什么?

例如,如果我有一个文本框值为 014 或 065,它应该只返回 14 或 65

4

3 回答 3

284

我们可以使用四种方法进行这种转换

  1. 基数的parseInt 10
  2. 数字构造函数
  3. 一元加运算符
  4. 使用数学函数(减法)

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 53BigInt的数字,最近添加了原语。检查BigInt此处的浏览器兼容性。

转换代码将是这样的。

const numString = '099999999999999999999';
const number = BigInt(numString);

PS:为什么基数对 很重要parseInt

如果 radix 未定义或为 0(或不存在),JavaScript 假定如下:

  • 如果输入字符串以“0x”或“0X”开头,则基数为 16(十六进制)并解析字符串的其余部分
  • 如果输入字符串以“0”开头,则基数为 8(八进制)或 10(十进制)
  • 如果输入字符串以任何其他值开头,则基数为 10(十进制)

确切选择哪个基数取决于实现。ECMAScript 5 指定使用 10(十进制),但并非所有浏览器都支持这一点。

For this reason, always specify a radix when using parseInt

于 2011-07-13T09:08:53.127 回答
236

正则表达式:

"014".replace(/^0+/, '')
于 2011-07-13T09:00:13.780 回答
24

目前尚不清楚您为什么要这样做。如果您想获得正确的数值,可以使用一元+ [docs]

value = +value;

如果您只想格式化文本,那么正则表达式可能会更好。这取决于我要说的你正在处理的价值观。如果你只有整数,那么

input.value = +input.value;

也很好。当然,它也适用于浮点值,但取决于点后有多少位,将其转换为数字并返回字符串可以(至少用于显示)删除一些。

于 2011-07-13T09:02:22.393 回答