簡體   English   中英

Javascript:確保參數產生有效的HTML元素(類型檢查)

[英]Javascript: Ensuring an argument yields a valid HTML element (type-checking)

我一直在閱讀一些舊代碼,其中許多使用了我在網上抓取的代碼片段。 我遇到了幾個這樣的借用函數,它們需要一個元素作為參數,但是可以將該元素作為元素本身或在.getElementById()使用的字符串來傳遞。 以下兩個中哪一個更好,為什么? 還是有更好的版本? (更好=可讀,標准,安全)

版本1

function doSomethingWithElem( elem /*, param2, ... */ ) {
    elem = (typeof elem === 'string' || elem instanceof String)
         ?  document.getElementById( elem )
         :  elem;

    // more stuff...
}

版本2

function doSomething2( elem /*, param2, ... */ ) {
    elem = document.getElementById( elem ) || elem;

    // more stuff...
}

主要區別在於,一個在調用gEBI之前檢查字符串的實例,而另一個依賴gEBI返回undefined 他們都不檢查確保elem確實是HTMLElement

假設有一個定義明確的API(用戶知道他應該傳遞一個字符串或HTML元素),類型檢查有多重要? 是否主要需要類型檢查來幫助腳本用戶調試自己的代碼? 這兩種方法中是否都存在細微的陷阱,例如gEBI的可能的返回值可能會使版本2混亂?

我會選擇版本1,因為它更具可讀性。 您會看到它處理2種情況,更清楚的是,其中一種是字符串,另一種是直接元素。 不過,我從未見過對instanceof String的檢查,因為我在99%的人中都聲明過字符串原語。 我對gEBI進行了一些測試,它看起來很健壯,對於任何無效的東西(數組,函數,對象等),它只會返回null

要檢查elem是否實際上是HTML元素,請參見: JavaScript isDOM-如何檢查JavaScript對象是否為DOM對象?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM