我是 javascript 的新手,以下 2 个函数是否做同样的事情,你会选择一个而不是另一个吗?
var multiply = function(arg1, arg2) {
arg1 && (arg1 = 0);
arg2 && (arg2 = 0);
return arg1*arg2;
}
var multiply = function(arg1, arg2) {
arg1 = arg1 || 0;
arg2 = arg2 || 0;
return arg1*arg2;
}
我问的原因是我第一次看到这样的东西
function(path, limit) {
var ref = firebaseRef(path);
limit && (ref = ref.limit(limit)); //if i understood correctly this line does an assignment based on condition without an if statement
return $firebase(ref);
}
最佳答案
function(path, limit) {
var ref = firebaseRef(path);
limit && (ref = ref.limit(limit)); // Important
return $firebase(ref);
}
Important那一行,可以这样写
if (limit) {
ref = ref.limit(limit);
}
但是如果你想像第一种方式那样写,你就可以了,
ref = limit && ref.limit(limit)
这有一个问题,当 limit
为 Falsy 时 &&
立即返回 limit
的评估 Falsy 值,因此 ref
现在是 Falsy。我相信你不会想要这个。
归根结底,作为程序员,我们编写的代码的可读性和可维护性很重要。因此,我建议使用明确的 if
检查,我在答案开头提到过。
注意:另外,正如其他人所指出的,第一个multiply
应该是这样的
var multiply = function(arg1, arg2) {
arg1 || (arg1 = 0);
arg2 || (arg2 = 0);
return arg1 * arg2;
}
更好的是,我会这样写
var multiply = function(arg1, arg2) {
return (arg1 || 0) * (arg2 || 0);
}
关于javascript - 可选参数和默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23369362/