抛出预期错误:RangeError:数组长度无效

我有一个简单的阶乘函数:


function factorial(n){

  let array = Array(n).fill(0).map((e, i) => i + 1)

  if (array.length) return array.reduce((a, b) => a * b);

  else {

    return 1;

  }

}  

但由于某些原因,这是扔Expected error was thrown: RangeError: Invalid array length在codewars。


我试图通过if-else块解释数组长度为 0 / 未定义。


但是,我仍然收到错误消息。我不确定如何解释无效范围,坦率地说,不明白它指的是什么。


我还尝试在以下范围内抛出“rangeError” try-catch:


function factorial(n) {

  try {

    let array = Array(n)

      .fill(0)

      .map((e, i) => i + 1);

    return array.reduce((a, b) => a * b);

  } catch (error) {

    if (error instanceof TypeError) {

      throw new error();

    } else if (error instanceof RangeError) {

      throw new error();

    } else {

      throw error;

    }

  }

}

事实上,这造成了第二个错误: TypeError: error is not a constructor


RISEBY
浏览 509回答 3
3回答

HUH函数

您需要RangeError按照以下指定的值将其扔到那里0 or greater than 12function factorial(n) {&nbsp; if(n < 0 || n > 12){&nbsp; &nbsp; throw new RangeError('')&nbsp; }&nbsp; let array = Array(n).fill(0).map((e, i) => i + 1)&nbsp; if (array.length) return array.reduce((a, b) => a * b);&nbsp; else {&nbsp; &nbsp; return 1;&nbsp; }}

吃鸡游戏

如果给你一个负数,你试图创建一个长度 < 0 的数组,这会导致你的错误。你需要处理负面Array(Math.abs(n))这将创建一个长度数组,无论它是正数还是负数。

翻阅古今

问题的描述说你需要在n小于0和大于时抛出 RangeError 12。所以只需使用if之前的语句,你就会通过。function factorial(n){&nbsp; if(n < 0 || n > 12){&nbsp; &nbsp; throw RangeError;&nbsp; }&nbsp; let array = Array(n).fill(0).map((e, i) => i + 1)&nbsp; if (array.length) return array.reduce((a, b) => a * b);&nbsp; else {&nbsp; &nbsp; return 1;&nbsp; }}&nbsp;&nbsp;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript