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

时间:2014-03-15 16:01:13

标签: javascript

假设我在JavaScript中有一个函数:

function something (variable) {
    console.log(variable);
}

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

6 个答案:

答案 0 :(得分:7)

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

例如:

function test(foo)
{
    console.log(foo === undefined); // true
}

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

function test(foo)
{
    console.log(foo || 'default value');
}

如果它是真实的,上面会输出foo的值,否则会输出'default value'

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

如果foo不是undefined,则输出'default value',否则输出function test(foo) { console.log(arguments.length > 0 ? foo : 'default value'); }

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

foo

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

进一步考虑

虽然自ES5以来foo === void 0; typeof foo === 'undefined'; // also works for undeclared variables not writeable,但并非所有浏览器都会如此警惕地强制执行此操作。如果您担心这个问题,可以使用两种方法:

{{1}}

答案 1 :(得分:2)

应该如此简单:

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

通常,您可以为这样的参数指定默认值:

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

或者,如果您需要针对0false等进行辩护(以及提供@Ketola),您可以做以下事情:

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

... this || that被称为short circuit evaluation

答案 2 :(得分:2)

以上所有内容都可以肯定,但这是最简单的方法,我最常使用它。

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

答案 3 :(得分:1)

您可以查看arguments变量

的大小

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/arguments

function something (variable) {
  if(arguments.length===0){console.log("variable is null");}
  else{
    console.log(variable);
  }
}

另请查看此处以检查变量是否为空,

How to determine if variable is 'undefined' or 'null'?

答案 4 :(得分:1)

测试变量的值如下:

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

答案 5 :(得分:1)

或者更友好的(IMO)选项是:

function getProfile( singleVariable )
{
    singleVariable = singleVariable || false;
    if (singleVariable) {
        alert('we have a var')
    }
    else {
        alert('nothing opassed');
    }
}
getProfile();
getProfile('tom');

然后当你开始传递大量参数,但希望功能灵活时,你可以这样做:

function getProfile(params)
{
    params = params || {};

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

而不是

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');

这是假的,是令人讨厌的..通过一个卑鄙的效率要高得多