在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如何做到这一点?
答案 0 :(得分:17)
如果myObj是全局的,则需要引用窗口对象,否则如果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);
答案 1 :(得分:0)
我认为其他答案已经证明,在这里,单线程可能会失败。我的下面的版本可能更具可读性,并没有明确地测试对象/属性的存在,但是并不短得多:
function MyFunc(myParam){
if (!myParam){
try{
myParam = myObj.myParam;
}
catch(e){
myParam = 10;
}
}
}