#javascript #heap-memory
#javascript #куча-память
Вопрос:
Я пытаюсь проверить входные данные: если 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 heap из памяти»
Комментарии:
1. какой браузер или движок JS?
2. И каковы были параметры
n
andv
, когда вы получили эту ошибку?3. Я делаю это в www.codewars.com . Я получил ошибку с параметрами ( бесконечный, — бесконечный)
Ответ №1:
Обновленный ответ
Сколько элементов будет помещено в массив? Побитовое сравнение ‘~~’ анализирует его до 32-битного результата. Максимум 2 ^ 31 элемента.
Number() даст вам значение с плавающей запятой, которое потенциально может запустить цикл for и нажать ‘v’ 1.7976931348623157e 308 (Number.MAX_VALUE) раз. Это рано или поздно приведет к нехватке памяти.