如何在JavaScript中将传递给函数的变量设置为null
假设我在JavaScript中有一个函数:
function something (variable) {
console.log(variable);
}
我如何设置,如果没有变量通过,那么它默认为空?
当你调用一个函数时,对于所需函数参数的数量,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
的值(无论其类型如何),如果传递参数。
进一步考虑
尽管自ES5以来undefined
不可写,但并非所有浏览器都会如此警惕地执行此操作。 如果您担心这一点,您可以使用两种选择:
foo === void 0;
typeof foo === 'undefined'; // also works for undeclared variables
以上所有内容都可以正常工作,但这是最简单的方法,我使用最多。
variable = variable ? variable : undefined; // you can use null as well
它应该像下面这样简单:
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. */
}
或者,如果您需要防御0
, false
等(并为@Ketola服务),则可以制作如下所示的内容:
function something (somevar1) {
somevar1 = ['', 0, false, null, undefined].indexOf(somevar1) > -1
&& null || somevar1;
}
... this || that
... this || that
就是所谓的短路评估 。
上一篇: How to set a variable passed on to a function as null in JavaScript
下一篇: How can I check whether an optional parameter was provided?