代码之家  ›  专栏  ›  技术社区  ›  Mike

在javascript中设置默认值的惯用方法

  •  15
  • Mike  · 技术社区  · 17 年前

    在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
    

    它甚至可能起作用。但这是最好的方法吗?

    例如,约翰·雷西格会怎么做?

    2 回复  |  直到 17 年前
        1
  •  17
  •   Luca Matteis    17 年前

    如果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);
    
        2
  •  0
  •   Kenan Banks    17 年前

    我认为其他的答案已经证明了一条直线在这里有很多失败的方法。下面的我的版本可能更具可读性,并且没有显式地测试对象/属性的存在性,但不会短得多:

    function MyFunc(myParam){
        if (!myParam){
            try{
                myParam = myObj.myParam;
            }
            catch(e){
                myParam = 10;
            }
        }
    }