2.5 表达式与运算符
表达式用于计算数值、比较数据和选择结果。相同运算符的优先级与结合顺序遵循 Java、JavaScript 的共同规则;DataQL 的类型转换与数值精度规则见数值。
运算符优先级
下表从高到低排列,同一行优先级相同。二元运算从左向右结合,一元运算和三元选择从右向左结合;括号可改变顺序。
| 优先级 | 运算符 | 用途 |
|---|---|---|
| 1 | +、-、!(一元) | 数值正负、布尔取反 |
| 2 | *、/、\、% | 乘、除、整除、求余 |
| 3 | +、-(二元) | 加、减;+ 也用于字符串拼接 |
| 4 | <<、>>、>>> | 左移、有符号右移、无符号右移 |
| 5 | <、<=、>、>= | 大小比较 |
| 6 | ==、!= | 相等与不等 |
| 7 | & | 按位与 |
| 8 | ^ | 按位异或 |
| 9 | | | 按位或 |
| 10 | && | 逻辑与 |
| 11 | || | 逻辑或 |
| 12 | ? : | 条件选择 |
\ 是 DataQL 的整除运算符。语言未提供 ++、--、~、=== 或赋值表达式。
return [1 + 2 * 3, (1 + 2) * 3, 8 - 3 - 1, 1 << 2 + 1];
结果为 [7, 9, 4, 8]。
一元与二元运算
一元 + 保留数值,一元 - 取相反数;! 接收布尔值。位运算不使用 !。
var amount = 12;
return [+amount, -amount, !true, 'amount=' + amount];
短路求值
&&、|| 接收布尔值。&& 左侧为 false 时跳过右侧,|| 左侧为 true 时跳过右侧。&& 的优先级高于 ||。
var fail = () -> {
throw "must not be called";
};
return [false && fail(), true || fail(), true || false && false];
结果为 [false, true, true],fail() 不会执行。
三元选择
condition ? value1 : value2 只执行选中的分支。嵌套选择建议加括号。
var score = 85;
return score >= 90 ? 'A' : (score >= 60 ? 'B' : 'C');