操作符总览(按优先级从高到低)
优先级 | 操作符 | 说明 | 示例 |
---|---|---|---|
1 | () , [] , . , ?. |
调用函数 / 访问集合 / 成员访问 / 空安全访问 | foo() , list[0] , obj.name , obj?.name |
2 | -expr , !expr , ~expr , await |
单目负号 / 逻辑非 / 按位取反 / 异步等待 | -a , !isOk , ~x , await future |
3 | * , / , ~/ , % |
乘 / 除 / 整除 / 取余 | a * b , a ~/ b |
4 | + , - |
加 / 减 | a + b , a - b |
5 | << , >> , >>> |
位移(逻辑右移从 Dart 2.14 支持) | a << 2 |
6 | & |
按位与 | a & b |
7 | ^ |
按位异或 | a ^ b |
8 | ` | ` | 按位或 |
9 | < , > , <= , >= , as , is , is! |
比较 / 类型判断 / 类型转换 | a < b , obj is String |
10 | == , != |
相等 / 不等 | a == b |
11 | ?? |
空合并(null 合并) | a ?? b |
12 | && |
逻辑与 | a && b |
13 | ` | ` | |
14 | ?: (条件运算符) |
三元运算 | cond ? a : b |
15 | = , += , -= , *= , /= , ??= 等 |
赋值及复合赋值 | a = b , a += 1 , a ??= 0 |
16 | .. |
级联运算符 | obj..method() |
空安全相关
?.
→ 空安全访问:如果前面是 null,直接返回 null,不报错
??
→ 空合并:如果前面是 null,返回右边
??=
→ 空合并赋值:如果变量是 null,赋值右边的内容
String? name;
print(name?.isEmpty); // null 安全,name 可能为 null,所以使用 ?. 来调用 isEmpty 方法
print(name ?? "Guest"); // 输出 Guest
print(name ??= "Tom"); // name 是 null,所以赋值为 "Tom"
print(name); // 输出 Tom
类型判断与转换
is
→ 类型判断
is!
→ 不是该类型
as
→ 类型转换(可能抛异常)
int a = 123;
String b = 'ducafecat';
String c = 'abc';
print(a as Object); // 123
print(b is String); // true
print(c is! String); // false
条件表达式
操作符 | 解释 |
---|---|
condition ? expr1 : expr2 |
如果 condition 是 true ,执行 expr1 (并返回执行的结果); 否则执行 expr2 并返回其结果。 |
bool isFinish = true;
String txtVal = isFinish ? 'yes' : 'no';
print(txtVal); // 输出: yes
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1909773034@qq.com