2017-02-23 72 views
2

是否有下面的語句任何顯著差異:條件運算符與&& ||之間的區別構建

$value && 'YES' || 'NO'; 

$value ? 'YES' : 'NO'; 
+1

如果YES''有點麻煩怎麼辦? – Biffen

+0

不,只是測試它,我錯了。沒有認識到如果$值是虛假的,||仍然會被評估。 – Shilly

+0

它們在功能上是相同的,但是IMO三元件更易於讀取 –

回答

5

如果你使用常量編碼,因爲你的代碼樣本中,則沒有,有沒有什麼區別。尤其重要的是,你所處位置的常數是這樣一個真值。但是,當你不知道結果值是什麼時,那麼是的,它們是不同的。試想一下:

var x = a ? b : c; 

在該代碼中,它肯定的是,如果a是truthy,x將被設置爲b值的情況。否則,它將被設置爲值c

現在,在另一方面:

var x = a && b || c; 

這裏,x將被設置爲b值只有當兩個a和值是truthy。如果b有錯,則評估將轉到||的另一端。

+0

,但'YES' *是* truthy – Jamiec

+0

@Jamiec我會澄清開頭的句子。 – Pointy

+0

好吧,現在我明白了。 –

1

他們更多或更少相同,鑑於你目前的代碼。如果YES被虛假的東西所取代,這將是一個不同的故事。以下代碼將兩者與各種輸入進行比較。

function test1($value){ 
 
    return $value && 'YES' || 'NO'; 
 
} 
 

 
function test2($value){ 
 
    return $value ? 'YES' : 'NO'; 
 
} 
 

 
function compare(desc, $value){ 
 
    console.log(desc, test1($value), test2($value)); 
 
} 
 

 
compare("true",true); 
 
compare("false",false); 
 

 

 
compare("truthy1",1); 
 
compare("truthy2","foo"); 
 
compare("undefined"); 
 
compare("falsey","")

相關問題