这两种检查参数的方式有什么区别?

function foo(a, b) {
    this.a=a;
    this.b=b;
}


使用方法:

if (arguments.length === 1) {}


要么

if (this.b !== undefined) {}

最佳答案

如果要检查强制性参数,则将使用arguments.length作为第一步。如果要检查可选参数,通常的模式是:

function foo(a,b){
    this.a = a || "foo";
    // etc
}


请注意,这仅在参数不能为“假”值(例如,空字符串,零,null,未定义,false,NaN)时有效。例如,如果将空字符串作为a参数传递,则将具有foo。如果您只考虑undefined作为可选参数的值,则必须执行以下操作:

function foo(a){
    this.a = a === undefined ? "foo" : a;
    // etc
}


如果要同时考虑null和undefined及可选参数,则可以具有:

function foo(a){
    this.a = a == undefined ? "foo" : a;
    // etc
}


当然,您也可以使用运算符typeof。例如,您希望a只能是一个字符串:

function foo(a) {
    this.a = typeof a === "string" ? a : "";
    // etc
}


您也可以强制a始终为字符串,在最坏的情况下,将使用给定的非字符串值的字符串版本(也未定义):

function foo(a) {
    this.a = String(a);
    // etc
}


更复杂的情况有一些实用程序功能可以帮助您完成所有这些检查,您在其中说了所需的参数,可选参数,默认值等。

10-07 21:57
查看更多