2012-12-04 29 views
0

我發現了有關使用可選參數創建函數的類似問題。但我不斷遇到錯誤是參數可能不存在。我有一個交互式地圖,正在做一堆事情。但是,如果outputlayer爲null,則該函數將不會執行。該圖層可能存在也可能不存在。如果它不存在,我似乎無法弄清楚如何傳遞這個可選參數。謝謝你的幫助!如何使用可能未定義的參數創建JavaScript函數?

function appdelete(selected,vectorlayer,drawFeature,outputlayer) { 

    $(selected).prev().children().children().eq(2).val('Latitude'); 
    $(selected).prev().children().children().eq(4).val('Longitude'); 
    vectorlayer.destroyFeatures(); 
    drawFeature.activate(); 

    try { 
     map.removeLayer(outputlayer); 
    } catch(err) { }; 
} 
+3

爲什麼不只是檢查'如果(outputlayer ===未定義)回報;'? –

回答

3

檢查它是否存在,可能是類型。

if(outputlayer && "object" === typeof outputlayer) { 
    map.removeLayer(outputlayer); 
} 
+0

我其實錯誤的東西。當輸出層不存在時,該功能甚至不會開始執行。我收到一個錯誤:Uncaught ReferenceError:sllayer沒有定義 – Kyle

+0

什麼是sllayer? – Tetaxa

+0

函數執行時,即通過輸出層參數傳遞的圖層。我通過jQuery調用這個函數:'$(「#sightlinedelete」)。click(function(){appdelete($(this),slvectorLayer,sldrawFeature,sllayer)})' – Kyle

1

您需要檢查變量存在:

if(outputlayer){ 
    map.removeLayer(outputlayer); 
} 
1

如果你只關心undefined,這樣做:

if(outputlayer === undefined) return; 

if(outputlayer !== undefined) { 
    map.removeLayer(outputlayer); 
} 
+0

省略「未定義」檢查,因此您不會在'null'對象上'removeLayer'。 – Cerbrus

0

默認參數初始化:

outputlayer= (typeof outputlayer=== "undefined") ? "someDefaultValue" : outputlayer; 

在你的函數:

function appdelete(selected,vectorlayer,drawFeature,outputlayer) { 
    outputlayer= (typeof outputlayer=== "undefined") ? "defaultValue" : outputlayer; 
    $(selected).prev().children().children().eq(2).val('Latitude'); 
    $(selected).prev().children().children().eq(4).val('Longitude'); 
    vectorlayer.destroyFeatures(); 
    drawFeature.activate(); 

    map.removeLayer(outputlayer);  
}