2016-08-01 4 views
-3

Ich bekomme einen seltsamen Wert für den folgenden Ausdruck, während ich versuche, den K-Code zu ändern, wenn die Shift-Taste im keyUp-Ereignis gedrückt.Ich bekomme ein seltsames Ergebnis für einen Ausdruck mit ternären Operator

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

Aber, wenn es durch Einschließen Klammer verwendet wird, es funktioniert gut

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

Bitte beraten, was ist die Ursache dafür, warum der erste Ausdruck überhaupt nicht den Wert 39 berücksichtigt. Brauchen Sie Ihre Hilfe und Danke im Voraus.

+2

siehe [Dokumentation] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Operator_Precedence) ... '-' sitzt eine 13,'?: 'Sitzt auf 4. .. also, ja, die Priorität des Operators ist der Grund für dieses erwartete Ergebnis. –

+0

Zwei Wörter: Operator Vorrang. – gcampbell

Antwort

0

Ihr erster Ausdruck subtrahiert e.shiftKey von 39 und wertet aus, ob das Ergebnis wahr oder falsch ist. Der Wert ist ein Wert ungleich Null und wird daher als true ausgewertet, wenn er als Boolescher Wert interpretiert wird. Daher ist das Ergebnis 2, da 2 das Ergebnis ist, wenn der Ausdruck wahr ist.

Ihr zweiter Ausdruck bewertet, ob e.shiftKey wahr oder falsch ist. Der Wert ist auch ungleich Null, also ist es auch wahr. Das Ergebnis ist also 2, die dann von 39 subtrahiert wird, so dass 37

Ihre Aussagen zu diesen äquivalent sind (die Eltern in der ersten sind unnötig, ich habe sie nur für Klarheit setzen in):

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

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

Put in if-Anweisungen sie aussehen:

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

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

so, wie die oben commen sagen, es ist eine Frage der Operator Vorrang. Klammern stehen immer an erster Stelle, da sie Vorrang vor Vorrang haben. Dann logisches NOT (!), Dann Exponenten, dann Multiplikation/Division, dann Addition/Subtraktion, dann & &, dann ||, dann ternäre Operatoren. Das sind nur die Grundlagen; da sind noch einige andere drin. Schauen Sie sich das Dokument an, das Jaromanda X verlinkt hat.

Verwandte Themen