2014-11-22 75 views
0

我正在做的事情codeschool的角行程,並通過做傳遞的運動之一:if語句和返回VAR === somethingElse

this.isSet = function(value) { 
    if (value === this.tab) { 
    return true; 
    } 
}; 

但在接下來的練習,我的代碼獲取此替代:

this.isSet = function(tabName){ 
    return this.tab === tabName; 
}; 

這一定是個愚蠢的問題,但是你可以繞過if語句嗎?只需使用簡單的===?

+0

(x === y)爲真或假。第一和第二的區別在於第二個也可以返回假,如果它們不相等 – 2014-11-22 12:35:25

+0

不,這兩件事並不意味着同樣的事情。試想一下,一個'return'總是返回表達式,而一個if語句中包含的'return'只會在if語句的body被執行時返回。否則,控制流將在函數體內繼續。 – 2014-11-22 12:35:37

+0

我知道程序員,甚至寫道:'if(bool_var == true){return true;} else {return false;}':) – 2014-11-22 12:44:19

回答

1

如果值=== this.tab,則返回true,如果value!== this.tab,則undefined將被返回。在第二個示例中===將返回true,並且!==將返回false。未定義和錯誤都是'虛假',因此您可以以相同的方式使用它們。

1

如果您重新讀取自己的代碼,您會看到if語句不會添加任何內容,如果失敗,您的函數將返回undefined,這不是最優的,因爲它不是boolean值。

這不是一個「搭橋」(我不太明白你的意思是什麼),但聲明return this.tab === tabName;回報truefalse根據評估結果(這將永遠是一個boolean值即第二碼示例返回相同的值(true)作爲第一個,當value/tabNamethis.tab分別的值相等(===)。

+0

我想問的是如果兩者是可以互換的。我現在明白我的陳述可能會返回未定義的而不是錯誤的。 – user3697034 2014-11-22 12:44:06

0

==運算符將做任何必要的類型轉換之後的相等比較。該== =運算符不會進行轉換,所以如果兩個值不是相同的類型===將簡單地retu假。在這種情況下===會更快,並且可能返回與==不同的結果。在所有其他情況下,性能將是相同的。

請參見本教程的詳細信息:http://www.c-point.com/javascript_tutorial/jsgrpComparison.htm