我有这个有可选参数的功能。问题是,当我传递一个参数时,它表现得好像我从未传递过它。
这是我的代码:
function sideA(i){
// i is an optional argument.
i = i || 'random';
console.log(i);
}
sideA(0);
此处,控制台将始终显示“random
”。不确定是什么。有什么想法吗?
答案 0 :(得分:1)
0,"",undefined,null
视为false
。
在这一行
i = i || 'random';
如果我是真的那么i的值将被分配,其他随机将被使用
试试这个
i= typeof i === "undefined" ? "random" : i
像这样打电话
sideA(0)
sideA() // pass nothing to get random
答案 1 :(得分:1)
0
是假的。
我想您要检查它是null
还是undefined
:
function sideA(i) {
// i is an optional argument.
i = (i === null || i === undefined ? 'random' : i);
console.log(i);
}
sideA(0);

或者,您可以查看typeof
以查看它是否为数字:
function sideA(i) {
// i is an optional argument.
i = (typeof i === 'number' ? i : 'random');
console.log(i);
}
sideA(0);

<强>文档强>
答案 2 :(得分:1)
这是因为0
是Falsy - Glossary | MDN,因此falsy value Logical将返回第二个操作数。
如果你想使用哪个值传递,如果有任何未定义的值,但是如果没有像sideA();
那样使用参数,则想使用默认值,那么
i = arguments.length ? i : 'random';
答案 3 :(得分:0)
尝试明确测试i
是否为undefined
。如果i
不是undefined
,请返回i
,否则返回'random'
function sideA(i) {
// i is an optional argument.
// if `i` _not_ `undefined` , `i` = `i` ,
// else , `i` = `'random'`
i = i !== undefined ? i : 'random';
console.log(i);
}
sideA(0);
&#13;