@@ -29,22 +29,22 @@ export interface Operators {
2929function looseEqual ( a , b ) {
3030 return a == b
3131}
32- looseEqual . precedence = 10
32+ looseEqual . precedence = 8
3333
3434function looseNotEqual ( a , b ) {
3535 return a != b
3636}
37- looseNotEqual . precedence = 10
37+ looseNotEqual . precedence = 8
3838
3939function strictEqual ( a , b ) {
4040 return a === b
4141}
42- strictEqual . precedence = 10
42+ strictEqual . precedence = 8
4343
4444function strictNotEqual ( a , b ) {
4545 return a !== b
4646}
47- strictNotEqual . precedence = 10
47+ strictNotEqual . precedence = 8
4848
4949const operators : Operators = {
5050 // unary
@@ -157,69 +157,76 @@ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Oper
157157operators [ '@' ] . precedence = 21
158158operators [ '#' ] . precedence = 21
159159
160- // Member
161- operators [ '.' ] . precedence = 19
162- operators [ '[' ] . precedence = 19
163- operators [ '?.' ] . precedence = 19
160+ // Member access and call
161+ operators [ '.' ] . precedence = 17
162+ operators [ '[' ] . precedence = 17
163+ operators [ '?.' ] . precedence = 17
164164
165- // Logical not
166- operators [ '!' ] . precedence = 16
167- operators [ '!!' ] . precedence = 16 // explicit double-negative
165+ // Prefix operators
166+ operators [ '!' ] . precedence = 14
167+ operators [ '!!' ] . precedence = 14 // explicit double-negative
168168
169169// Prefix inc/dec
170- operators [ '++' ] . precedence = 16
171- operators [ '--' ] . precedence = 16
172- operators [ '&-' ] . precedence = 16
173-
174- // exponent
175- operators [ '**' ] . precedence = 15
176-
177- // mul/div/remainder
178- operators [ '%' ] . precedence = 14
179- operators [ '*' ] . precedence = 14
180- operators [ '/' ] . precedence = 14
181-
182- // add/sub
183- operators [ '+' ] . precedence = 13
184- operators [ '-' ] . precedence = 13
185-
186- // bitwise
187- operators [ '|' ] . precedence = 12
188- operators [ '^' ] . precedence = 11
189- operators [ '&' ] . precedence = 10
190-
191- // comparison
192- operators [ '<' ] . precedence = 11
193- operators [ '<=' ] . precedence = 11
194- operators [ '>' ] . precedence = 11
195- operators [ '>=' ] . precedence = 11
196-
197- // operators['in'].precedence = 8;
198- // operators['instanceof'].precedence = 8;
199- // equality
200- operators [ '==' ] . precedence = 10
201- operators [ '!=' ] . precedence = 10
202- operators [ '===' ] . precedence = 10
203- operators [ '!==' ] . precedence = 10
204-
205- // logic
206- operators [ '&&' ] . precedence = 6
207- operators [ '||' ] . precedence = 5
208- operators [ '??' ] . precedence = 5
170+ operators [ '++' ] . precedence = 14
171+ operators [ '--' ] . precedence = 14
172+ operators [ '&-' ] . precedence = 14
173+
174+ // Exponentiation
175+ operators [ '**' ] . precedence = 13
176+
177+ // Multiplicative
178+ operators [ '%' ] . precedence = 12
179+ operators [ '*' ] . precedence = 12
180+ operators [ '/' ] . precedence = 12
181+
182+ // Additive
183+ operators [ '+' ] . precedence = 11
184+ operators [ '-' ] . precedence = 11
185+
186+ // Relational
187+ operators [ '<' ] . precedence = 9
188+ operators [ '<=' ] . precedence = 9
189+ operators [ '>' ] . precedence = 9
190+ operators [ '>=' ] . precedence = 9
191+
192+ // operators['in'].precedence = 9;
193+ // operators['instanceof'].precedence = 9;
194+
195+ // Equality
196+ operators [ '==' ] . precedence = 8
197+ operators [ '!=' ] . precedence = 8
198+ operators [ '===' ] . precedence = 8
199+ operators [ '!==' ] . precedence = 8
200+
201+ // Bitwise AND
202+ operators [ '&' ] . precedence = 7
203+
204+ // Bitwise XOR
205+ operators [ '^' ] . precedence = 6
206+
207+ // Bitwise OR
208+ operators [ '|' ] . precedence = 5
209+
210+ // Logical AND
211+ operators [ '&&' ] . precedence = 4
212+
213+ // Logical OR / Nullish coalescing
214+ operators [ '||' ] . precedence = 3
215+ operators [ '??' ] . precedence = 3
209216
210217operators [ '&&' ] . earlyOut = a => ! a
211218operators [ '||' ] . earlyOut = a => a
212219operators [ '??' ] . earlyOut = a => a
213220
214- // multiple values
215- operators [ ',' ] . precedence = 2
221+ // Assignment and miscellaneous (lamda)
222+ operators [ '=>' ] . precedence = 2
223+
224+ // Comma, multiple values
225+ operators [ ',' ] . precedence = 1
216226
217227// Call a function
218228operators [ 'call' ] . precedence = 1
219229
220- // lambda
221- operators [ '=>' ] . precedence = 1
222-
223230// Extend the Options type so ko.options.strictEquality is strongly typed
224231declare module '@tko/utils' {
225232 interface Options {
0 commit comments