跳到主要内容

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');