![](/img/trans.png)
[英]Is there an idiomatic Javascript way of avoiding providing a default value for a failing `Array.find()`?
[英]Idiomatic way to set default value in JavaScript
在 JavaScript 中执行以下操作的最惯用的方法是什么:
如果调用者未将myParam
传递给MyFunc
,那么我想将其设置为默认值。 但首先我想尝试从另一个可能不存在的对象中获取它:
function MyFunc(myParam) {
if (!myParam) {
if (!myObj) {
myParam = 10;
}
else {
myParam = myObj.myParam;
}
}
alert(myParam);
}
我开始写:
myParam = myParam || myObj.mParam || 10
但意识到如果myObj
不存在那么这将失败。 我可能猜到以下几点:
myParam = myParam || (myObj && myObj.mParam) || 10
它甚至可能起作用。 但这是最好的方法吗?
例如,John Resig 会怎么做?
如果 myObj 是一个全局变量,它需要引用 window 对象,否则如果myObj
未定义,它将抛出一个错误。
myParam = myParam || (window.myObj ? window.myObj.mParam : 10);
或者
myParam = myParam || (window.myObj && window.myObj.mParam) || 10;
这也有效:
myParam = myParam || ((typeof myObj !== "undefined") ? myObj.mParam : 10);
我认为其他答案已经证明,单线可能在这里失败的方式有很多。 我下面的版本可能更具可读性,并且没有明确测试对象/属性的存在,但也不会更短:
function MyFunc(myParam){
if (!myParam){
try{
myParam = myObj.myParam;
}
catch(e){
myParam = 10;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.