Dart 空安全相关的运算符

??是判断前者是否为null,如果是null就取后者,否则取前者

var a = null;

var b = 'b';

print(a ?? b); // b

?.是避空运算符,如果前者为null,后面的代码就会被跳过,也就不会报错

var a;
print(a.length); // 会报错,因为a有可能为null
print(a?.length); //不会报错,如果a是null,就跳过本行后面的代码

??=是如果左边为null,就从右边赋值,反之不赋值

var a = null;
var b = "b";
var c = "c";
print(a ??= b)  // b
print(b ??= c)  //c

?[]是判断索引处的值是否为null,如果是null就跳过后面部分,就不会报错

var a = new List;
a[1] = 2;
print(a?[2]); //不会报错,如果不加?就会报错

?是将类型声明为可空类型

String? a;        //可空类型允许不赋值(值为null),不会报错
String a = "a";  //不加? 为非空类型,一定要赋值,否则报错

!是将类型声明为非空类型

var map = {'key': 'value'};
print(map['key']!.length); // 加 ! 不会报错,不加就会报错

你可能感兴趣的:(Dart 空安全相关的运算符)