2014-10-16 29 views
0

只注意到自動類型轉換的一個奇特的副作用在JS:用+代替||是不好的?

if (false || false) { 

} 

是一樣的:

if (false + false) { 

} 

而且兩者(false || true)(false + true)將返回相同的結果(真)。

爲什麼+在這種情況下看不到更多用途?是否有一個堅實的理由(除了可能導致混淆的代碼)我們不應該使用+代替||

我想可能會因爲多餘的投射而受到打擊,但是嘿,我們正在救人!耶爲一個微優化代替另一個!

+7

我將它留給優化器,使代碼儘可能短,並編寫清晰的源代碼。 「+」的使用根本不清楚,並且可能會讓新開發人員陷入混亂。 – ajp15243 2014-10-16 17:26:23

+8

*「爲什麼不在這種情況下看到更多用途」*您能回答相反的問題嗎?爲什麼有人會用+而不是||? – 2014-10-16 17:26:37

+3

爲什麼我反對,我可以問一下嗎?這個問題不適合SO的格式嗎? – 2014-10-16 17:26:54

回答

13

爲什麼不+看在這種情況下,更多地使用?

下面是我想到的原因:

  1. ,人們不認爲使用它,因爲他們的思維邏輯,而不是數學。

  2. +將始終評估表達式的兩側;如果左側操作數爲真,則||將不會評估右側操作數的所有if (boolean || boolean)無關緊要;可以爲if (func() || func())重要。

  3. ||具有此wonderfully powerful behavior,表達的結果是所述第一truthy操作數的值,不truefalse,這是非常有用的。 +會導致一個數字或字符串,這將不太有用。

  4. ||將測試它的論點的真實性/謬誤; +會將它們轉換爲數字或字符串,具體取決於它在任何一方看到的內容。所以有很多情況下||+會給你不同的結果。

  5. 使用+會要求你很快就會知道+會在兩邊各種類型上做什麼,從而使代碼更清晰和更難維護。它只是錯誤的操作符(好的,所以這個主題非常主觀:-))。 ||有邏輯比較,爲什麼不使用它?

+2

我很喜歡這個答案。感謝您澄清此事。 – 2014-10-16 17:36:14

+0

轉換爲社區wiki答案?似乎是一個很好的例子。而且這不像你需要的點:) – j08691 2014-10-16 17:40:09

+0

@ j08691:大聲笑是真實的,但我只是拋出了我腦海中的想法,而不是總結社區的反應。 – 2014-10-16 17:53:11

1

因爲||運營商,並提供它的意義比+這是剛剛加入0 + 0導致false更好。

當使用+,鑄造也做了01falsetrue,和一個可能不知道在兩個布爾加入爲什麼,但||使它明顯。

最後

我想有可能是一個性能,因爲打額外的鑄造,但 嘿 - we're保存有個性!耶爲一個微優化到位 的另一個!

額外鑄造>保存字符

2

false || false回報false

false + false回報0(這是隱式現澆到false

所以,是的,它確實樣的工作,但..

||是這樣做的標準方式,如其他編程語言中所見。 +絕對混淆的人,到最後,是不正確的:

false || true === truetrue

false + true === truefalse

0

考慮下面的代碼:

var a=-1; 
var b=false; 
var c=1; 
if(a)alert(true); 
if(b)alert(true); 
if(c)alert(true); 
//two of the above coerce to `true` 
if(a+b+c) 
{ 
    alert("phew"); 
} 
else 
{ 
    //yet we hit this branch 
    alert("wtf"); 
} 

仍然是一個好主意嗎?