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

如何在JavaScript中将传递给函数的变量设置为null,javascript,Javascript,假设我有一个JavaScript函数: function something (variable) { console.log(variable); } 如何设置如果没有传递变量,则默认为空?您可以检查参数的大小 还可以查看此处,以检查变量是否为null 像这样测试变量的值: function something (variable) { variable = (typeof variable !== 'undefined') ? variable : null; } fu

假设我有一个JavaScript函数:

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

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

您可以检查
参数的大小

还可以查看此处,以检查变量是否为null


像这样测试变量的值:

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

它应该简单到:

function something (variable) {
    console.log(variable || null);
}
通常,您可以将默认值指定给如下参数:

function something (variable) {
    variable = (typeof variable !== 'undefined') ? variable : null;
}
function something (somevar1, somevar2 /* ... somevarn */) {
    somevar1 = somevar1 || 'somevar1 not present';
    somevar1 = somevar2 || 2;
    somevar3 = somevar3 || {foo: 'bar', foobar: null}
    /* etc. */
}
或者,如果您需要针对
0
false
等进行防御(并提供服务),您可以编写如下内容:

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

或更友好的(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');

这是必需的,而且很烦人。。传递一个abject要高效得多

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

例如:

function test(foo)
{
    console.log(foo === undefined); // true
}
要设置默认值,至少有三个选项:

function test(foo)
{
    console.log(foo || 'default value');
}
如果是真值,则上面将输出
foo
,否则将输出
“默认值”

这将输出
foo
的值,如果它不是
未定义的
,或者
的“默认值”

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

function test(foo)
{
    console.log(arguments.length > 0 ? foo : 'default value');
}
如果传递了参数,则将输出
foo
(无论其类型如何)的值

进一步考虑 虽然
未定义
是从ES5开始的,但并不是所有浏览器都会如此警惕地执行这一点。如果您对此感到担忧,有两种选择:

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

以上所有的方法都会奏效,但这是最简单的方法,我用得最多

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

如果它没有通过,它的值将是未定义的。您是否特别需要
null
值?抱歉,我没有注意到我没有编辑自己的答案。这只适用于计算结果为“true”的变量<代码>某些内容(0,false)
无法按预期工作。OP询问“如果没有传递变量,如何设置…”True。但这仍然行不通。如果传递了“false”或0,则
variable | | null
的计算结果为null。如果传递了
false
0
,则传递了某些内容,尽管某些内容的计算结果为null。OP询问“如何设置如果没有传递变量,则默认情况下为
null”,因此,如果定义了变量,则解决方案不应将变量设置为
null
。谢谢,@John-如果我传递诸如getProfile('tom','smith')之类的消息,那么函数会假定othervar2为null?还是假的?还是未定义?未定义。然而,我强烈建议不要使用这种方法。随着应用程序的增长,以这种方式传递的参数的管理将成为一场噩梦。事实上,任何第三方插件都会要求传递一个数组(对象)。例如:$.ajax({url:'www.blah',type:'GET',success:function(data){alert(data);}})要添加到这一点,当您有效地传递一个assoc数组时,传递它们的参数的顺序是不相关的。如果
singleVariable
是一个错误的值,此解决方案将导致误判,但是您故意传递的值。
|false
不会影响程序的行为;如果删除该行,函数也会运行。从技术上讲,这个答案没有错,但是当传递两个参数、三个参数或四个参数时会发生什么…@John可以对任意数量的参数使用
参数
,并根据
参数
对象中的状态和位置来决定,不管变量的名称如何。你能再详细说明一下你的想法吗?也许我遗漏了你说的话。@John例如,
参数[0]
对应于
variable1
参数[1]
对应于
variable2
参数[N-1]
对应于
variableN
,以便检查它们是否为
null
或其他内容。另外,
argument.length==N-1
意味着未传递
variableN
。我不知道你可以这样使用论点。。我认为参数本质上必须是一个数字数组,但这在功能上是不等价的
typeof x===“undefined”
更为具体,因为这只检查错误<代码>0
也是错误的。