如何在javascript中将传递给函数的变量设置为空

How to set a variable passed on to a function as null in JavaScript

假设我有一个javascript函数:

1
2
3
function something (variable) {
    console.log(variable);
}

如何设置如果没有传递变量,则默认为空?


当调用函数时,javascript对于所需函数参数的数量不是很挑剔;声明中提到但未传递的任何参数都将设置为undefined类型。

例如:

1
2
3
4
function test(foo)
{
    console.log(foo === undefined); // true
}

要设置默认值,至少有三个选项:

1
2
3
4
function test(foo)
{
    console.log(foo || 'default value');
}

如果是真的,上面将输出EDOCX1的值(5),否则输出EDOCX1的值(6)。

1
2
3
4
function test(foo)
{
    console.log(foo === undefined ? foo : 'default value');
}

如果不是undefined'default value',这将输出foo的值。

最后,您可以计算传递的参数数:

1
2
3
4
function test(foo)
{
    console.log(arguments.length > 0 ? foo : 'default value');
}

如果传递了参数,则将输出EDOCX1的值(无论其类型如何)。

进一步考虑

虽然自ES5以来,undefined是不可写的,但并非所有浏览器都会如此警惕地执行这一操作。如果您担心这一点,可以使用两种备选方案:

1
2
foo === void 0;
typeof foo === 'undefined'; // also works for undeclared variables

以上所有的方法都是可行的,但这是最简单的方法,我使用的最多。

1
variable = variable ? variable : undefined; // you can use null as well


它应该简单到:

1
2
3
function something (variable) {
    console.log(variable || null);
}

通常,您可以将默认值分配给如下参数:

1
2
3
4
5
6
function something (somevar1, somevar2 /* ... somevarn */) {
    somevar1 = somevar1 || 'somevar1 not present';
    somevar1 = somevar2 || 2;
    somevar3 = somevar3 || {foo: 'bar', foobar: null}
    /* etc. */
}

或者,如果您需要防御0false等(以及为@ketola提供服务),您可以做如下的事情:

1
2
3
4
function something (somevar1) {
    somevar1 = ['', 0, false, null, undefined].indexOf(somevar1) > -1
               && null || somevar1;
}

... this || that被称为短路评估。


或者更友好的选择是:

1
2
3
4
5
6
7
8
9
10
11
12
function getProfile( singleVariable )
{
    singleVariable = singleVariable || false;
    if (singleVariable) {
        alert('we have a var')
    }
    else {
        alert('nothing opassed');
    }
}
getProfile();
getProfile('tom');

然后,当您开始传递大量参数,但希望函数灵活时,可以执行以下操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
function getProfile(params)
{
    params = params || {};

    if (params.username) {
        alert(params.username)
    }
    if (params.id) {
      alert(params.id);
    }
}
getProfile();
getProfile({username:'tom', id: 123654987});

而不是

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function getProfile(singleVariable, otherVar, othervar2)
{
    singleVariable = singleVariable || false;
    otherVar = otherVar|| false;
    otherVar2 = singleVariable2 || false;

    if( singleVariable ){
        alert('we have a var')
    }
    else {
        alert('nothing opassed');
    }
}

getProfile('tom', false, 'smith');

这是必须的,很烦人。通过一个卑鄙的人更有效


像这样测试变量的值:

1
2
3
function something (variable) {
    variable = (typeof variable !== 'undefined') ? variable : null;
}


您可以检查arguments变量的大小,

https://developer.mozilla.org/en-us/docs/web/javascript/reference/functions_and_function_scope/arguments

1
2
3
4
5
6
function something (variable) {
  if(arguments.length===0){console.log("variable is null");}
  else{
    console.log(variable);
  }
}

还可以在这里查看以检查变量是否为空,

如何确定变量是"未定义"还是"空"?