2015-05-21 60 views
2

有鑑於此:JavaScript的可選參數,我需要檢查未定義?

function hello(name, option) { 
    if (option === 'useless') { 
    return '!!!!'; 
    } else { 
    return 'Hi, ' + name; 
    } 
} 

如果省略了option說法,沒有什麼不好的似乎發生。我真的需要檢查嗎?

if (typeof option !== 'undefined' && option === 'useless') 
+0

如果參數是可選的,則需要爲其設置默認值。 – StephenCollins

+2

不,不是在這種情況下。將'undefined'和''lessless'進行比較是完全安全的 – Phil

+5

@StephenCollins完全不正確 – Phil

回答

5

您不需要typeof檢查。

函數範圍內的形式參數總是有效的identifiers

是感興趣的規範的部分:

§ 10.4.3 Entering Function Code

9.通過功能代碼代碼如10.5所述的參數列表執行聲明綁定實例化。

§ 10.5 Declaration Binding Instantiation(強調)

4.如果代碼是功能碼,然後
    [...]
    d。每串argName,在列表順序做
       我。讓ÑÑ加1
        II的電流值。 如果Ñ大於argCount,讓vundefined否則令v是的Ñ理論值的ARGS元件值」。
        [...]
       訴呼叫ENV的SetMutableBinding傳遞argNamev具體的方法,並嚴格作爲參數。

這意味着,對於一個調用參數不足(例如f()function f(arg) {},所述arg結合其execution context(又名範圍)內將被初始化爲undefined