从 Javascript 中的数字中删除前导零的最简单且跨浏览器兼容的方法是什么?
例如,如果我有一个文本框值为 014 或 065,它应该只返回 14 或 65
我们可以使用四种方法进行这种转换
10
使用数学函数(减法)
const numString = “065”;
//parseInt with radix=10
let number = parseInt(numString, 10);
console.log(number);
// Number constructor
number = Number(numString);
// unary plus operator
number = +numString;
// conversion using mathematical function (subtraction)
number = numString - 0;
对于原始类型Number,最安全的最大值是 2 53-1 ( Number.MAX_SAFE_INTEGER)。
Number
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类型的情况下执行的所有操作都会失败。
string
number
对于大于 2 53BigInt的数字,最近添加了原语。检查BigInt此处的浏览器兼容性。
BigInt
转换代码将是这样的。
const numString = '099999999999999999999'; const number = BigInt(numString);
parseInt
如果 radix 未定义或为 0(或不存在),JavaScript 假定如下:
确切选择哪个基数取决于实现。ECMAScript 5 指定使用 10(十进制),但并非所有浏览器都支持这一点。
因此, 在使用 parseInt 时始终指定一个基数