Javascript 处理虚假的论点

Javascript 处理虚假的论点,javascript,Javascript,如果函数的任何参数都是错误的,那么有没有干净的方法为函数指定默认值 我知道你可以做类似的事情 function addSomething(element, someArr = []) { someArr.push(element); } 但是,如果第二个参数为null,您将得到一个null的“cannotreadproperty‘push’” 我希望下面的方法能奏效 function addSomething(element, someArr || []) { someArr.push

如果函数的任何参数都是错误的,那么有没有干净的方法为函数指定默认值

我知道你可以做类似的事情

function addSomething(element, someArr = []) {
  someArr.push(element);
}
但是,如果第二个参数为null,您将得到一个null的“cannotreadproperty‘push’”

我希望下面的方法能奏效

function addSomething(element, someArr || []) {
  someArr.push(element);
}

所以我留下来做方法内部的检查?

function addSomething(element, someArr) {
  someArr = someArr || [];
  someArr.push(element);
  // OR
  someArr && someArr.push(element);
}

或者是否有我错过的模式

您的代码是您所希望的最好的。
function addSomething(element, someArr || []) {
  someArr.push(element);
}
null
与数组不同,因此如果将其显式传递到函数中,则应:

  • 大声失败,因为程序中有错误。您需要一个数组,但得到了空值
  • 优雅地处理它,因为您希望同时允许
    null
我想你想要第二个案子。对于TypeScript注释,此函数可能如下所示:

function addSomething(element, someArr: any[]|null)

你必须明确承认这一事实。

即使是最后一种方法也不是100%安全的:

函数addSomething(元素,someArr){
someArr&&someArr.push(元素);
}

添加一些东西(“测试”、“foobar”)不,这是相当重要的。如果你关心的是当你有更多的参数,并且你想要避免中间的一个,你可以总是调用你的函数用“代码>未定义的< /代码>而不是NULL。”KAIIDO问题是,它将是数据或NULL,将传递给函数。API调用时,我可以在将变量传递给函数之前检查它们,但我希望函数本身是“安全的”并且失败。我喜欢默默地失败。这是真的,很好的一点。我只关心null,因为如果API调用失败,我会得到null。因此arg要么始终为null的arr。但是,如果有人试图把一个字符串,它当然会失败。但是Array.isArray(someArr)更好,因为我希望函数更健壮。很快会将此标记为例外答案,也希望看到其他意见。。。但基本上我应该做>
someArr=Array.isArray(someArr)| |[](我在该函数中多次使用数组方法)看起来它不起作用。请添加一个工作示例。如果在参数内部使用
someArr=someArr | |【】
,则会出现错误
use-before-declaration
,同时考虑到PeterMander的答案,这看起来不像是“您所能期望的最好结果”,问题没有提及TypeScript;你在答案中的打字脚本只是模糊了这一点。OP对一种允许他们跳过所有代码的语言功能感兴趣。没有,因此他们必须手工编写代码。@NinaScholz它在浏览器控制台中工作。就算它不是好代码,一个linter等应该标记它,但它会工作的