2013-06-19 57 views
17

當我使用的邏輯算子的字符串& &兩者之間,爲什麼它給我的第二個字符串作爲輸出:邏輯運算符&&和兩個字符串在JavaScript

var c = "Cat" && "Dog"; 

我意識到,與0除外,false,null,undefined,「 - 其他所有內容在上面的邏輯表達式中被評估爲布爾值true。但爲什麼輸出第二個字符串,而不是第一個?爲什麼輸出不僅僅是「真」,因爲它被評估爲布爾表達式。

感謝

+1

因爲這是JS如何工作的,並感實性超出布爾正如你指出。 –

+0

看到這個簡潔的答案:[用最簡單的術語](http://stackoverflow.com/a/32158899) – Dewey

+0

查看此答案[用最簡單的術語](http://stackoverflow.com/a/32158899) – Dewey

回答

17

在表達

"Cat" && "Dog" 
// => "Dog" 

因爲你使用&&,JavaScript是看好你,它會驗證表達的雙方都true。在這種情況下,"Dog"只是最後一次評估的事情。

更明確的,你可以不喜歡

var c = "Cat" != null && "Dog" != null 

這多羅嗦了一點,但如果你想爲布爾

簡單快捷將此歸結爲

var c = true && true 
// => true 

var c = !!("Cat" && "Dog") 
// => true 

如果您只是使用簡單的REPL或JavaScript控制檯,您將能夠看到很容易輸出。


每低於

使用||一個評論,JavaScript是看好你至少一個側面true。由於「貓」是真的,它停在那裏,並返回「貓」。這就是所謂的Short-circuit evaluation

+0

「狗「是最後評估的東西?怎麼樣「貓」|| 「狗」(=>「貓」)呢? –

+1

@su,我在我的答案中添加了一個部分來解決你的問題:) – naomik

+0

你說得對。謝謝。 –

8

我認爲這是因爲邏輯運算符的性質& &。 Javascript以下列方式執行表達式"cat" && "Dog"

檢查值「cat」 - 它返回除「」,0,null,undefined或false之外的其他內容並且是truthy。 Javascript看到&&,所以它繼續表達並且面向字符串「Dog」,它是「」,0,null,undefined或false以外的東西,並且是truthy,表達式結束並且表達式返回它檢查的最後一個值。

如果您要更換&&||表達式結束於第一truthy價值和多數民衆的方式

var boolean = "cat" || "dog" 

最先返回值:由@naomik幾乎涵蓋它cat

+1

+1是的,它真的歸結爲邏輯運算符101,不是嗎? :)尼斯寫下來。 – naomik

6

答案。如果你想深入,我建議看一下ECMAScript規範,第11節。11:

http://www.ecma-international.org/ecma-262/5.1/#sec-11.11

在 「語義」 節中,我們可以看到:

生產LogicalANDExpressionLogicalANDExpression & & BitwiseORExpression被評估如下:

  1. lref是評估結果LogicalANDExpression
  2. lval成爲GetValue(lref)。
  3. If ToBoolean(lval)is false,return lval
  4. rref是評估結果BitwiseORExpression
  5. Return GetValue(rref)。
+0

這個問題是3歲,爲什麼發表另一個答案? – Scott

+3

因爲我剛剛發現它,並認爲我有一些額外的知識分享,以前不共享;)我不認爲問題上有「過期日期」:) –