为什么使用Number(num)!= num而不是~~ num!= num会抛出“ JavaScript堆内存不足”?

时间:2019-04-10 09:15:00

标签: javascript heap-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)

我遇到了此错误“致命错误:CALL_AND_RETRY_LAST分配失败-JavaScript堆内存不足”

1 个答案:

答案 0 :(得分:0)

更新后的答案

有多少个元素将被推入数组? 按位“ ~~”比较将其解析为32位结果。最多2 ^ 31个项目。

Number()将为您提供一个浮点数,该浮点数可以潜在地在循环中运行该浮点并按“ v”键1.7976931348623157e + 308(Number.MAX_VALUE)次。那迟早会使您的内存不足。