當我使用的邏輯算子的字符串& &兩者之間,爲什麼它給我的第二個字符串作爲輸出:邏輯運算符&&和兩個字符串在JavaScript
var c = "Cat" && "Dog";
我意識到,與0除外,false,null,undefined,「 - 其他所有內容在上面的邏輯表達式中被評估爲布爾值true。但爲什麼輸出第二個字符串,而不是第一個?爲什麼輸出不僅僅是「真」,因爲它被評估爲布爾表達式。
感謝
當我使用的邏輯算子的字符串& &兩者之間,爲什麼它給我的第二個字符串作爲輸出:邏輯運算符&&和兩個字符串在JavaScript
var c = "Cat" && "Dog";
我意識到,與0除外,false,null,undefined,「 - 其他所有內容在上面的邏輯表達式中被評估爲布爾值true。但爲什麼輸出第二個字符串,而不是第一個?爲什麼輸出不僅僅是「真」,因爲它被評估爲布爾表達式。
感謝
在表達
"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
我認爲這是因爲邏輯運算符的性質& &。 Javascript以下列方式執行表達式"cat" && "Dog"
:
檢查值「cat」 - 它返回除「」,0,null,undefined或false之外的其他內容並且是truthy。 Javascript看到&&
,所以它繼續表達並且面向字符串「Dog」,它是「」,0,null,undefined或false以外的東西,並且是truthy,表達式結束並且表達式返回它檢查的最後一個值。
如果您要更換&&
與||
表達式結束於第一truthy價值和多數民衆的方式
var boolean = "cat" || "dog"
最先返回值:由@naomik幾乎涵蓋它cat
+1是的,它真的歸結爲邏輯運算符101,不是嗎? :)尼斯寫下來。 – naomik
答案。如果你想深入,我建議看一下ECMAScript規範,第11節。11:
http://www.ecma-international.org/ecma-262/5.1/#sec-11.11
在 「語義」 節中,我們可以看到:
生產LogicalANDExpression:LogicalANDExpression & & BitwiseORExpression被評估如下:
- 讓lref是評估結果LogicalANDExpression。
- 讓lval成爲GetValue(lref)。
- If ToBoolean(lval)is false,return lval。
- 讓rref是評估結果BitwiseORExpression。
- Return GetValue(rref)。
這個問題是3歲,爲什麼發表另一個答案? – Scott
因爲我剛剛發現它,並認爲我有一些額外的知識分享,以前不共享;)我不認爲問題上有「過期日期」:) –
因爲這是JS如何工作的,並感實性超出布爾正如你指出。 –
看到這個簡潔的答案:[用最簡單的術語](http://stackoverflow.com/a/32158899) – Dewey
查看此答案[用最簡單的術語](http://stackoverflow.com/a/32158899) – Dewey