Javascript 是否有一种公认的方法可以从函数/方法中省略参数?

Javascript 是否有一种公认的方法可以从函数/方法中省略参数?,javascript,function,object,methods,parameters,Javascript,Function,Object,Methods,Parameters,假设我有一个对象构造函数MyObj,它的方法如下: MyObj.prototype.method = function(x, y){ x = x || this.x; //default value y = y || this.y; } 如果我希望x默认为this.x,该怎么办?这就是我想到的: var object = new MyObj(); var omit = 0; //I don't think the first two omit = ''; // valu

假设我有一个对象构造函数
MyObj
,它的方法如下:

MyObj.prototype.method = function(x, y){
    x = x || this.x; //default value
    y = y || this.y;
}
如果我希望
x
默认为
this.x
,该怎么办?这就是我想到的:

var object = new MyObj();
var omit = 0; //I don't think the first two
    omit = ''; // values would even default?
    omit = null;
    omit = undefined;
object.method(omit, 5);

问题是:是否有从函数中省略参数的最佳实践或公认方法?

通常,当您觉得需要定义此类占位符时,您真正需要的是使用选项对象:

MyObj.prototype.method = function(x, y){
    x = typeof x == 'undefined' ? this.x : x; //default value
    y = typeof y == 'undefined' ? this.y : y;
}

var object = new MyObj();
object.method(undefined, 5);// pass undefined
object.method({y: 5});
注意,使用
x=x | | this.x不允许错误值。这就是我通常这么做的原因

function method(opt) {
   var x = (opt && 'x' in opt) ? opt.x : defaultValue;
   ...
} 

当您确实需要传递
未定义的
值时,我认为
未定义的
是最明显的解决方案。最明显的是最容易维护。

我倾向于发现使用
null
是最容易跨语言的。这只是偏好的问题,但我更喜欢编写literal
null
值,因为其他任何内容都可以在代码中的其他地方定义。(甚至可以将未定义的
设置为某个值。)


undefined
似乎更清晰,因为这是根本不通过参数时得到的结果。但是我认为使用
未定义的
比使用
省略
的代码更明显,尤其是对于偶尔的读者/维护者。@alex23好吧,你在使用前总是要检查一下,这里没有区别。
(opt&&“x”在opt中)
(或者甚至去掉
opt&
部分)不是更有意义吗?否则您不能显式地传递
未定义的
@ian是的,它会传递。没有考虑过(这是我重用的旧代码)。。。我编辑。@dystroy有几种方法可以“检查”像这样的东西,我只是想知道:)@BillyMathews我声明了对象,就像我的例子一样,然后是的。但您可以在其他地方声明一个选项对象并重用它。请注意,如果您希望x或y能够具有任何“falsy”值(0、“、false等),则此方法不适用@Sushil在这种情况下,只需使用
x==undefined
检查
undefined
MyObj.prototype.method = function(x, y){
    x = x || this.x; //default value
    y = y || this.y;
}

var object = new MyObj();
object.method(null, 5);