回答
從MDN (Logical Operators) - Logical And (&&):
將返回EXPR1是否可以轉換爲false;否則,返回 expr2。因此,當與布爾值一起使用時,如果兩個 操作數均爲true,則& &返回true;否則,返回false。
true
顯然不能評估爲false,所以返回的第二個值是「abc」。
的&&
操作者在JavaScript比在C或Java或等它總是返回最後評價子表達式的值(總的表達式是否爲真—「truthy」 —或假—「falsy」)和沒有按略有不同」 t強制布爾結果。當它失敗時(當其中一個值是「falsy」)時,同樣的結果是原始值,而不是值的布爾解釋。
所以是這樣的:給A && B
,解釋執行以下操作:
- 評估表達的,給人一種
- 一個 V —值設A 乙是結果鑄造 V爲布爾
- 如果A 乙是
false
,則該的值表達爲A V - 評估表達式B,給予乙 V
- 返回b V作爲
&&
表達式的值。
因此,在一個if
語句中,&&
表達具有相同效果如C或Java的布爾轉換運算符,因爲if
語句本身執行對總體表達結果的truthy/falsy測試。然而,當它本身被使用時,它更像是「如果第一個表達式是真的,請給我第二個表達式的值,否則給我第一個表達式的值」。
&&
如果左側評估爲false
,則返回左側,否則返回右側尺寸。
true
不是false
,所以它返回右邊,這是你的字符串。
> 0 && true // LHS is false, return LHS
0
> 1 && true // LHS is true, return RHS
true
> false && 0 // LHS is false, return LHS
false
> true && false // LHS is true, return RHS
false
你有點可以 「修復」,通過包裝表達成!!()
:
!!(true && 'abc');
這可能會產生混淆,因爲這樣做你仍然不返回第一個操作數的雙重否定,而是轉換'abc'做國內第一否定時,布爾(它將這個字符串轉換爲「true」,因爲它不是空的並且否定了這個),然後你再次否定它以得到正確的值。我認爲你應該解釋它背後的原因,它仍然是'abc'得到返回,只是在它的轉換布爾值。 – 2012-07-18 14:41:33
@RobertKoritnik:是啊,也許「修復」應爲「完成」所取代。 – jAndy 2012-07-18 14:44:27
@RobertKoritnik:實際上,'!!()'將返回TRUE;如果所有條件與''&&結合是'真'。否則,它總是「錯誤」加上你不必處理像OP那樣的任何值。 – jAndy 2012-07-18 14:45:45
- 1. 爲什麼pandas.Series([numpy.nan]).stype(「bool」)的結果是True?
- 2. 爲什麼在JavaScript中添加兩個空數組的結果是字符串?
- 3. 爲什麼File.Copy(string,string,bool)不覆蓋?
- 4. 在Javascript中,爲什麼array.map(String)返回字符串數組?
- 5. decodeURIComponent(encodeURIComponent(string))的結果是什麼?
- 6. 爲什麼數字+字符串在JavaScript中的字符串?
- 7. 爲什麼string.format()的結果是一個字符串,即使是數字?
- 8. 爲什麼Date添加結果是字符串?
- 9. 爲什麼當我使用count結果是空字符串?
- 10. 如果aria-expanded屬性的值爲true或字符串爲「true」?
- 11. 爲什麼+ +的字符串給出奇怪的結果
- 12. 爲什麼Salt的MD5結果在結果字符串的末尾有「==」?
- 13. 爲什麼JavaScript中的「0 === -0」爲true?
- 14. 爲什麼JavaScript中的「」== [null]爲true?
- 15. 爲什麼字符或字符串被認爲是在javascript中的falsy
- 16. 我的字符串concatination每次加倍結果,爲什麼?
- 17. 爲什麼這個Github項目將字符串轉換爲bool?
- 18. 爲什麼不同字符串的解碼結果是相同的?
- 19. 爲什麼usort()結果是TRUE,而不是排序數組?
- 20. 爲什麼字符串總是空的?
- 21. 返回true是字符串包含特定字符在Javascript中
- 22. C++爲什麼的std :: string比C字符串
- 23. 爲什麼HttpRequestHeaders.GetValues(string)返回的IEnumerable只有1個字符串?
- 24. 爲什麼「2010年」=〜/([0-4] *)/結果爲$ 1中的空字符串?
- 25. 什麼是以空字符結尾的字符串?
- 26. 爲什麼(true> null)在JavaScript中總是返回true?
- 27. 爲什麼string.empty()在字符串包含值時計算爲true?
- 28. jquery autocomplete疑問1 - 爲什麼數據是字符串和結果是對象?
- 29. 這位javascript的結果是什麼?
- 30. 如果String中沒有字符是Python中的元音,則返回True
參見:http://stackoverflow.com/q/2587182 – CMS 2012-07-18 14:38:42
**臨提示:**這些可以說是等價的:'someBoolVar? DoTrue():DoFalse()'與'someBoolVar && DoTrue()||相同DoFalse()'但是瞭解第二個,可以很容易地在Javascript中編寫其他僞操作符:即。 ** coalesce **:'someVar || defaultValue' – 2012-07-18 14:39:28