非空运算符??的使用规则:是指当变量值为null时用新的值代替赋值。这里用JavaScript和C#两种语言来测试,经过测试,非空运算符在Javascript当中要比C#当中适范围宽。下面代码对比示例:

C#当中的非空运算符:这里ASP.NET的WebForm后台代码, Page_Load当中通过int?id=null 和 string name = null 展示非空运算符用法。当变量为null时非空取值右边的参数,此时打印id返回8,name返回“Togo”。如下代码:

C# 代码  复制
    int? id = null;

   Response.Write(id ?? 8);

   Response.Write("<br/>");
   string name = "";//string name = "";字符串空值不等于null

   
Response.Write(name ?? "Togo");

Javascript当中的非空运算符:在JavaScript当中除了可以用于非空取值,字符串空值不等null,还可以用于非定义的变量或属性undefined取值。

JavaScript 代码  复制
   //非空取值
  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"。如下:

JavaScript 代码  复制
    //undefined取值
   const user = {
            profile: {
                name: 'Mr.T'//,
                //city:'Beijing'
            }
    }

    const city = user.profile.city?? 'City not provided'

    console.log(city) // "City not provided"