回答
二進制按位運算符(包括|
)與加法運算符+
的綁定較不緊密。因此
1|0+','+2|0
真的
1|(0+','+2)|0
這是
1|('0,2')|0
這是
1|0|0
這是1
。 (字符串「0,2」被轉換成一個整數;作爲數它NaN
,但因爲是NaN
浮點概念時被迫是整數它變成0
)
編輯關於第一個表達式—,其中涉及JavaScript逗號運算符。逗號運算符允許一個單獨的,基本上獨立的(除了通過副作用之外的)表達式被「粘合在一起」成分析器將會識別爲單個表達式的列表。評估時,每個表達式將按照通常情況進行計算,但整體表達式的值只是列表中最後一個表達式的值。因此,1|0,2|0
將首先導致1|0
被評估,但該結果被丟棄,整體值僅爲2|0
。
逗號操作符是常見的是獲得來自C.他們的表達式語法許多語言(據我所知,C從別的地方得到它,它幾乎沒有一個革命性的概念。)因爲這種語言允許只是表達—一個表達式—出現在幾個有趣的語法情況中,並且因爲表達式可能(並且通常會)有副作用,所以有時能夠將幾個單獨的表達式嵌入語言真正只需要一個表達式的位置。也就是說,通常有更清潔和更好的方式來做事。在JavaScript中,我個人更喜歡使用立即調用的函數。由於性能方面的原因,它更加打字並可能稍差一點,但我認爲它更加清晰,因爲它允許爲臨時變量和更多涉及的邏輯提供獨立的名稱空間。
這個答案是對第二種情況的一個很好的解釋,但沒有解釋第一種情況。可以添加嗎? –
@PlatinumAzure哦,當然 - 我認爲第一個更明顯,但可能不適用於JavaScript和類似C語言的新手。 – Pointy
您需要查看operator precedence table以瞭解這一點。
表達式1|0,2|0
與逗號運算符相比具有按位或更高的優先級,因此它相當於(1|0), (2|0)
。 comma operator評估兩個操作數並返回第二個操作數,所以你得到的值爲(2|0)
。該值爲2
。
表達式1|0+','+2|0
具有比按位更高的優先級,或者相當於1|(0+','+2)|0
。0+','+2
的結果是「0,2」,它不是數字,所以它在數值運算中評估爲NaN
。它被脅迫0
在按位或,使葉片1|0|0
,並且該結果爲1
'「0,2」'沒有轉換爲'0',而是給出'NaN'。嘗試一下:'+(「0,2」)' –
@MattiasBuelens至少在這個操作中它最終作爲'0' – Ian
@Ian這是真的,但他的回答似乎表明它的計算結果爲'0',因爲它部分解析了「0,2」(直到','),而事實並非如此。 '''強制'NaN'(使'0,2'''數字''成'0'的結果)。 –
逗號運算符它的兩個操作數(從左至右) 並返回第二個操作數的值。
因此,在1|0,2|0
,第一兩個表達式1|0
和2|0
從左至右,然後返回最後一個表達式(2|0
)的結果進行了評價。 1|0 === 1
和2|0 === 2
,所以最後一個表達式的結果是2
,然後返回。
在1|0+','+2|0
中,逗號出現在與0
和2
連接的字符串文字中。整個事情被評估如下:
(1 | ((0+',')+2)) | 0
(1 | ('0,'+2))) | 0
(數+字符串=字符串連接)(1 | '0,2') | 0
(串+數=字符串連接)(1 | NaN) | 0
(逐位OR需要多個操作數。0,2
未能轉換,改爲NaN
)1 | 0
(按位或只處理整數,所以浮點數NaN
澆鑄到0
)1
- 1. 爲什麼1%2等於1?
- 2. C爲什麼3除以2等於0,而是1等於1?
- 3. 爲什麼+ []或+「」等於0在javascript
- 4. 爲什麼0.1 * 10-1不等於0?
- 5. 爲什麼NUM = 1 - - 「2」 等於3個
- 6. 爲什麼「1」等於「+1」?
- 7. 爲什麼2 + 1&0結果是0?
- 8. 爲什麼string ='0'不嚴格等於javascript中的新String('0')
- 9. 爲什麼_XBEGIN_STARTED等於-1?
- 10. JavaScript中做什麼(0&1)?
- 11. 爲什麼thing [:] [0]等於thing [0] [:]?
- 12. 爲什麼-1/2在C++中評估爲0,但在Python中爲-1?
- 13. 爲什麼在JavaScript中0010等於8?
- 14. 爲什麼Clojure中的(/ 1/2)等於2N?
- 15. 爲什麼OBJ [-0]不等於OBJ - 在JavaScript
- 16. 爲什麼在Matlab中2^52等於2^52 + 1?以及如何解決它?
- 17. 爲什麼爲i等於-1
- 18. 爲什麼JavaScript中的0小於Number.MIN_VALUE?
- 19. 爲什麼n中1:0在R中迭代2次?
- 20. 在語句String.Format(「{0,2:X2}」,b)中是什麼意思「{0,2:X2}」;
- 21. 爲什麼在PHP中按位〜0 = -1?
- 22. 在csh中,爲什麼4 - 3 + 1 == 0?
- 23. 在$ _ [0],$ _ [1] .....等等
- 24. 爲什麼JavaScript中的「0 === -0」爲true?
- 25. iOS - 什麼等價於「stretchableImageWithLeftCapWidth:0 topCapHeight:0」?
- 26. 爲什麼-2 >>> 1等於2147483647的Java
- 27. 爲什麼0 && 1是1,而1 && 0在紅寶石中是0?
- 28. python爲什麼「BABAB」.count(「BAB」)等於1?
- 29. 爲什麼是真等於-1
- 30. 爲什麼1字節等於8位?
[逗號運算符(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator) – Andreas
然後爲什麼它在第二個表達式中返回1? – Isaac
第二個逗號是一個字符串文字,而不是操作符。 – Quentin