如何将值'undefined'传递给具有多个参数的函数?

aja*_*221 44 javascript function undefined parameter-passing

我想在多参数函数上传递'undefined'的值但不省略参数.

"没有省略参数"是什么意思.我的意思是我们不应该只省略parm2这个例子:

function myFunction (parm1, parm2) {}
myFunction("abc");
Run Code Online (Sandbox Code Playgroud)

这确实会做出parm2未定义的,但是我不允许这样做,因为我需要在省略的参数之后指定其他参数,所以前面的方法在我想做parm1未定义的情况下也行不通但是也想要此后的其他参数保持一个值.

我试过用以下方法解决问题:

myFunction( ,"abc"); //doesn't seem to work
Run Code Online (Sandbox Code Playgroud)

更新:

并且myFunction(undefined, "abc"); «这现在可靠地起作用了.

但是,值得一提的是:

设置变量undefined被认为是一种不好的做法,我们应该使用null.

xda*_*azz 55

myFunction(undefined,"abc"); 这种方式应该有效,有什么问题?

看到这里

这是来自mozilla的未定义文档,受所有浏览器支持

  • 将变量设置为“ undefined”被认为是“不好的做法”。您应该传递一个“ null”值。有关更多信息,请参见[JavaScript中null和undefined之间有什么区别?](http://stackoverflow.com/a/5076962/1549837) (2认同)

dbr*_*rin 12

更好的方法可能是Object使用命名属性传递,然后查找这些特定的属性值.这样您就不必依赖于参数的数量.
例:Object.dummy

  • 这并不是一个糟糕的建议,但建议这总是*更好的方法有点傲慢,它实际上并没有回答这个问题. (6认同)
  • +1表示可以重写有问题的函数. (2认同)
  • 没有人说它总是更好。我不明白你对答案有何傲慢,这只是传递参数的另一种方式,避免了位置参数的问题。 (2认同)

bkb*_*oth 12

void操作似乎是最常见的方式明确地得到undefined.

您可以在示例中使用它:

myFunction(void 0, "abc");
Run Code Online (Sandbox Code Playgroud)

它也是一种可靠的比较方法,可防止在旧的JavaScript环境undefinedundefined被意外覆盖:

var x;
if (x === void 0) {
    // this will execute
}
Run Code Online (Sandbox Code Playgroud)