为什么使用 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) 次。那迟早会让你失忆。