我正在尝试验证输入:如果 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 堆内存不足">
更新了答案
有多少元素将被推入数组?按位的"~~"比较将其解析为 32 位结果。最多 2^31 个项目。
Number(( 会给你一个浮点数,它可能会运行 for 循环并推送 'v' 1.7976931348623157e+308 (Number.MAX_VALUE( 次。那迟早会让你失去记忆。