假设我有一个 JavaScript 函数:
如何设置默认为null,如果没有传递变量?
function something (variable) {
console.log(variable);
}
如何设置默认为null,如果没有传递变量?
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
的值为真,那么上述代码将输出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
是不可写的,但并非所有浏览器都会如此警惕地执行此操作。如果您担心此问题,有两个替代方案可供使用:foo === void 0;
typeof foo === 'undefined'; // also works for undeclared variables
arguments
变量的大小。
https://developer.mozilla.org/zh-CN/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);
}
}
在这里查看变量是否为null:
arguments
来处理任意数量的参数,并根据 arguments
对象中的状态和位置进行决策,而不考虑变量的名称。你能否详细说明一下你的想法?也许我没有理解你的意思。 - melcarguments [0]
对应于 variable1
,arguments [1]
对应于 variable2
,argument [N-1]
对应于 variableN
,以便检查它们是否为“null”或其他内容。此外,argument.length === N-1
意味着 variableN
没有被传递。 - melcfunction 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;
}
something(0,false)
将无法按预期工作。 - Ketolavariable || null
将计算为null。 - Ketolafalse
或 0
,则会传递 something,尽管它评估为 null。 - KooiIncnull
?如果变量已定义,则解决方案不应将变量设置为null
。 - Ketolavariable = variable ? variable : undefined; // you can use null as well
像这样测试您的变量值:
function something (variable) {
variable = (typeof variable !== 'undefined') ? variable : null;
}
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');
那个 false 是必需的,而且很烦人... 传递一个对象会更加高效。
singleVariable
是一个假值,但你故意传递了一个值,那么这个解决方案将会产生错误的负面结果。 - dee-see|| false
不会影响程序的行为;如果删除那一行,函数仍然可以正常工作。 - user2357112
null
)吗? - Mitya