Operators
The operators of JSX are the same to those in JavaScript (ECMA-262 3rd edition) except for the following changes.
- types of the operands accepted by the operators are more restrictive
- logical operators (&& ||) return boolean
- binary ?: operator has been introduced (to cover the use of || in JavaScript to return non-boolean values)
- introduction of the as operator
- delete is a statement instead of an operator
The table below lists the operators supported by JSX.
Operator | Returned Type | Operand Type(s) |
---|---|---|
(x)[1] | typeof x | |
func(...) | return type of the function | |
obj.prop | typeof obj.prop | obj: any object type |
array[index] | Nullable.<T> | array: Array.<T> index: number |
map[key] | Nullable.<T> | map: Map.<T> key: string |
x++ x-- |
typeof x | number or int |
obj instanceof type | boolean | obj: any object type type: a Class, Interface, or Mixin |
x as type[2] x as __noconvert__ type[3] |
type | |
++x --x |
typeof x | number or int |
+x -x |
typeof x | number or int |
~x | int | number or int |
! x | boolean | any |
typeof x | string | variant |
x * y x % y |
number or int[4] | number or int |
x / y | number | number or int |
x + y x - y |
number or int[4] | number or int |
x + y | string | string |
x << y x >> y x >>> y |
int | number or int |
x < y x<= y x > y x >= y |
boolean | number, int, string[5] |
x in y | boolean | x: string y: Map.<T> |
x == y x != y |
boolean | any except variant[5] |
x & y | int | number or int |
x ^ y | int | number or int |
x | y | int | number or int |
x && y | boolean | any |
x || y | boolean | any |
x ? y : z | typeof y | any[6] |
x ?: y | typeof x | any[5] |
x = y | typeof x | any[7] |
x op[8]= y | typeof x | same as op |
x, y | typeof y | any |
- grouping operator
- cast operator; in debug mode (i.e. unless --release or --disable-type-check is specified) raises an assertion failure when a invalid cast between object types are detected
- cast operator (simply changes the type of the value recognized by the compiler)
- int is returned if both operands are int
- types of x and y should be equal, or either should be convertible to the other
- types of y and z should be equal, or either should be convertible to the other
- type of y should be convertible to type of x
- any of: * / % + - << >> >>> & ^ |