2016-08-01 69 views
-3

當我在keyUp事件中按下shift鍵時嘗試更改k代碼時,我得到下面表達式的奇怪值。我得到一個帶三元運算符的表達式的奇怪結果

var k = 39 - (e.shiftKey)? 2:0; 結果:2

但是,當它被用於通過包圍支架,它工作正常

變種K = 39 - ((e.shiftKey)2:0); 結果:37

請注意,這是什麼根源,爲什麼第一個表達式根本不考慮值39.需要您的幫助,並提前致謝。

+2

請參閱[文檔](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Operator_Precedence)...'''坐在13,'?:'坐在4。 ..所以,是的,運算符優先級是這個預期結果的原因 –

+0

兩個字:運算符優先級。 – gcampbell

回答

0

您的第一個表達式從39中減去e.shiftKey並計算結果是true還是false。該值爲非零值,因此在轉換爲布爾值時計算結果爲true。因此,結果爲2,因爲如果表達式爲真,則結果爲2。

你的第二個表達式評估e.shiftKey是true還是false。該值也是非零的,所以也是如此。因此,結果是2,這然後會從39減去,剩下37

你的語句是等價的這些(在第一個父母是不必要的,我只是把他們在爲清楚起見):

var k = (39 - e.shiftKey) ? 2 : 0; 

var k = 39 - (e.shiftKey ? 2 : 0); 

投入,如果他們看起來像這樣的語句:

if (39 - e.shiftKey == true) k = 2; 

if (e.shiftKey == true) k = 39 - 2; 

所以,作爲評議人以上都在說,這是運算符優先級的問題。括號始終優先,因爲它們用於覆蓋優先級。然後邏輯非(!),然後指數,然後乘/除,然後加/減,然後||,然後||,然後三元運算符。這些只是基礎知識;那裏還有不少其他人。看看Jaromanda X鏈接的文檔。