2017-06-22 70 views
2

我在代碼中看到我經常使用下面的代碼樣式;Javascript:var1 == true &&(var2 = true)

var1 == true && (var2 = true) 

經過一些測試我想它歸結爲:

​​

這是正確的,或者是有更多的東西?爲什麼會有人使用它,因爲可讀性大大降低,因爲你乍一看就是對兩​​個變量的檢查。所以,你真的必須開始看單或雙平等歌曲和圓括號,哪些只是有點,你知道..只是好奇在這裏..

+4

這是正確的,是的,它是壞的可讀性。 – styfle

+3

[單行如果vs &&在JavaScript中](https://stackoverflow.com/questions/34704750/one-line-if-vs-in-javascript) – Xufox

+5

與'true'的第一次比較是多餘的。 –

回答

2

是的,這是等價的。據我所知,它被稱爲short-circuit evaluation,它描述了這樣一個事實,即只要其中一個部分是虛假的,解釋器就會爲整個布爾表達式返回false。

事實上,在你的例子中,它減少了可讀性。但我認爲它只是您工具箱中的另一個工具,當您覺得它可能有用時,可以使用它。考慮以下內容:

return user && user.name; 

這是我傾向於使用它的一個示例。在這種情況下,我認爲它實際上比

if (user) { 
    return user.name; 
} else { 
    return undefined; // or null or something alike 
} 

UPDATE

我想給你舉個例子,當我認爲這是種有益的構建更具可讀性。想想ES6的箭頭功能,如user => user.name。它不需要{}來打開一個身體,因爲它只有一條線。如果你想記錄的東西到控制檯(調試),你會最終不得不

user => { 
    console.log(user); // or something alike 
    return user.name; 
} 

你還不如用較短的變體

user => console.log(user) || user.name 

因爲console.log回報undefined登錄到控制檯後,因此返回user.name

+0

我不同意可讀性,你可能會保存一些行,但沒有更清楚。我懷疑你可能會習慣這個,雖然如果你使用它很多 – Bastiaan

+0

@Bastiaan Yup。我想我不會說「永遠使用它」,也不要「永遠不要使用它」。知道你可能擁有的每一種可能性是很好的。 – SVSchmidt

+0

@SWSSchmidt,到那裏還沒有完全確信:)你說明雖然很有道理,謝謝! – Bastiaan

0

是的,正如你所說的,還有更多。

第一部分var1 == true檢查結果是否爲truefalse

如果條件爲false之後的代碼沒有得到檢查或評估,因此var2未設置爲true

但是如果條件var1 == true的第一部分是true顯然是真的,則檢查&&之後的部分條件語句的第二部分。

現在條件的第二部分是它設置的操作(var2 = true)這是一種真理操作。

我們可以編輯你的代碼一點點的幫助您瞭解操作更清晰:

if(var1 === true && (var2 = true)){console.log('good');} 

我希望這有助於

+0

所以我提供的兩個樣本的功能是相同的。 – Bastiaan

+0

嗯,我不會這樣說,雖然結果是一樣的,在第一個例子中,你同時檢查'var1 === true'和操作的值(var2 = true)'本身是否真實/ falsy 因此整行'var1 === true &&(var2 ='watever')'是一個布爾條件 是的兩個例子都設置了'var2',但在第一個例子中,您還要檢查操作的結果'var2 = true',但對結果 沒有做任何事情,而在第二個例子中,你只是檢查var1並設置var2以防var1爲真。 – kapreski

相關問題