为什么使用 Number(num) != num 而不是 ~~num != num 抛出 "JavaScript heap out of memory"?
Why using Number(num) != num instead of ~~num != num throws "JavaScript heap out of memory"?
我正在尝试验证输入:如果 num 不是整数或整数格式的字符串,则抛出 TypeError。当我尝试像这样验证输入时,一切正常:
function prefill(n, v) {
let testArr = [];
let num = n;
//input validation
if(~~num != num || typeof num == 'boolean' || +num < 0) throw new
TypeError(num + ' is invalid')
else {
for (let i = 0; i < +n; i++) {
testArr.push(v);
}
return testArr;
}
}
但是当我尝试这种方式时,
if(Number(num) != num || +num < 0)
我遇到了这个错误"FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory"
更新答案
要将多少元素推入数组?
按位“~~”比较将其解析为 32 位结果。最多 2^31 项。
Number() 将为您提供一个浮点数,它可能 运行 循环并推送 'v' 1.7976931348623157e+308 (Number.MAX_VALUE) 次。那迟早会让你失忆。
我正在尝试验证输入:如果 num 不是整数或整数格式的字符串,则抛出 TypeError。当我尝试像这样验证输入时,一切正常:
function prefill(n, v) {
let testArr = [];
let num = n;
//input validation
if(~~num != num || typeof num == 'boolean' || +num < 0) throw new
TypeError(num + ' is invalid')
else {
for (let i = 0; i < +n; i++) {
testArr.push(v);
}
return testArr;
}
}
但是当我尝试这种方式时,
if(Number(num) != num || +num < 0)
我遇到了这个错误"FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory"
更新答案
要将多少元素推入数组? 按位“~~”比较将其解析为 32 位结果。最多 2^31 项。
Number() 将为您提供一个浮点数,它可能 运行 循环并推送 'v' 1.7976931348623157e+308 (Number.MAX_VALUE) 次。那迟早会让你失忆。