非空运算符??的使用规则:是指当变量值为null时用新的值代替赋值。这里用JavaScript和C#两种语言来测试,经过测试,非空运算符在Javascript当中要比C#当中适范围宽。下面代码对比示例:
C#当中的非空运算符:这里ASP.NET的WebForm后台代码, Page_Load当中通过int?id=null 和 string name = null 展示非空运算符用法。当变量为null时非空取值右边的参数,此时打印id返回8,name返回“Togo”。如下代码:
int? id = null;
Response.Write(id ?? 8);
Response.Write("<br/>");
string name = "";//string name = "";字符串空值不等于null
Response.Write(name ?? "Togo");
Javascript当中的非空运算符:在JavaScript当中除了可以用于非空取值,字符串空值不等null,还可以用于非定义的变量或属性undefined取值。
//非空取值
const userName = null;
const greeting = userName ?? 'Togo';
console.log(`Hello, ${greeting}`); // "Hello, Togo"
//字符''非空不等于null
const favoriteColor = '';
const myColor = favoriteColor ?? 'Green';
console.log(`Favorite Color: ${myColor}`); // "Favorite Color: " 此时为空字符
undefined取值处理嵌套对象属性:当处理复杂对象时,尤其是那些可能缺少属性的对象,?? 运算符可以防止出现未定义的错误。下面代码如果将city:'Beijing'属性取消注释,city属性存在则不是undefined,那么就会返回具体的城市名称,而不是返回"City not provided",这里通过非空运算符修饰,当未定义属性为undefined时返回"City not provided"。如下:
//undefined取值
const user = {
profile: {
name: 'Mr.T'//,
//city:'Beijing'
}
}
const city = user.profile.city?? 'City not provided'
console.log(city) // "City not provided"