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