Почему использование Number (num)! = Num вместо ~~ num! = Num выбрасывает «куча JavaScript из памяти»? - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь проверить ввод: если 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 Распределение не удалось - кучи JavaScript не хватает памяти"

1 Ответ

0 голосов
/ 10 апреля 2019

Обновленный ответ

Сколько элементов будет помещено в массив? Побитовое сравнение ~~ анализирует его до 32-битного результата. Максимум 2 ^ 31 предметов.

Number () даст вам число с плавающей запятой, которое потенциально может запустить ее для цикла и нажать 'v' 1.7976931348623157e + 308 (Number.MAX_VALUE) раз. Это рано или поздно лишит тебя памяти.

...