2017-06-29 77 views
0

關於條件if/else語句,以下示例在功能上等效嗎?這些JS條件語句在功能上是否相同?

function isEntering() { 
    if (this.stage === 'entering') { 
     return true; 
    } else { 
     return false; 
    } 
} 

function isEntering() { 
    if (this.stage === 'entering') { 
     return true; 
    } return false; 
} 

function isEntering() { 
    if (this.stage === 'entering') { 
     return true; 
    } 
} 

isEntering = (this.stage === 'entering') ? true : false; 

如果是這樣,我會使用最簡潔的選項。但只有四者在功能上等同。

+4

'isEntering =(this.stage === '進入')' –

+0

你省略'isEntering =()=> this.stage == ='進入';'。 – 2017-06-29 16:11:23

+0

這個函數isEntering(){if(this.stage ==='entered'){ return true; } }'返回未定義的情況下,其他人將返回false,其他人相等 – baao

回答

4

如果expr是一個布爾表達式,因爲它是在這裏,再有是沒有必要寫

if (expr) return true; 
else return false; 

或寫

if (expr) x = true; 
else x = false; 

或曾經寫

expr ? true : false 

,因爲是一個布爾表達式,expr可以返回,或轉讓,直接:

return expr; 

x = expr; 

的tersest選擇是一個你沒有給:

function isEntering() { return this.stage === 'entering'; } 
+0

這是正確的答案。不錯的工作! –

+0

而在es6胖箭頭語法中,這將是: isEntering =()=> {return this.stage ==='entering'; }; – Ademo

1

它們並不完全等同。 前兩個是等價的,但:

function isEntering() { 
    if (this.stage === 'entering') { 
     return true; 
    } 
} 

將返回undefined如果this.stage !== 'entering'

另外:

isEntering = (this.stage === 'entering') ? true : false; 

是不是限定函數作爲其他例子。

如前所述,您可以添加:

isEntering =() => this.stage === 'entering'; 

如果您不需要的功能,你可以使用:

isEntering = this.stage === 'entering' 
+0

謝謝,那正是我想要確定的。所以它不會返回「false」,除非你明確地將其作爲一個條件。所以它仍然是「虛假的」,並評估爲「虛假」,但實際上並不完全等同於功能。 – Ademo

+1

不,最後一個是**不等於**。它設置變量「isEntering」,而不是通過該名稱定義函數。 – 2017-06-29 16:16:38

+0

@torazaburo是對的,最後一個不對等,我會解決它。 –

-1

1,2和4的結果將是sa我。 但3可以返回undefined和 最佳做法,你可以去用一個第四

+0

不,(4)不一樣。仔細觀察。 – 2017-06-29 16:26:13