1,??空合并运算符在JavaScript中,??运算符称为零合并运算符(零合并运算符)。 null合并运算符(??)是一个逻辑运算符,当左操作数为null或未定义时返回其右操作数,否则返回左操作数。 与逻辑或运算符(||)不同,逻辑或运算符(||)如果左侧操作数为假,则返回右侧操作数。也就是说,如果你使用||为某些变量设置默认值,您可能会遇到意想不到的行为。比如当false时(例如,''或0)。请参见下面的示例。constfoo=null??'默认字符串';console.log(foo);//输出:“默认字符串”constbaz=0??42;控制台日志(baz);//输出:0constnullValue=null;constemptyText="";//空字符串,是一个假值,Boolean("")===falseconstsomeNumber=42;constvalA=nullValue??"valA的默认值";constvalB=emptyText??“valB的默认值”;constvalC=someNumber??0;控制台日志(valA);//"valA的默认值"console.log(valB);//""(空字符串为false,但不是null或undefined)console.log(valC);//422,??=Null赋值运算符此赋值运算符仅在当前值为空或未定义时才分配新值。以下示例突出显示此运算符本质上是空赋值的语法糖。varx=nullvary=5console.log(x??=y)//输出:5console.log(x=(x??y))//输出:53,?.可选链接运算符可选链接运算符(?.)允许读取位于连接对象链深处的属性值,而无需显式验证链中的每个引用是否有效。这?。运算符的功能类似于.链接运算符,除了如果引用为null(null或未定义)时不会导致错误,表达式会将返回值短路。语法:obj?.propobj?.[expr]arr?.[index]func?.(args)constadventurer={name:'Alice',cat:{name:'Dinah'}};constdogName=冒险家。dog?.name;console.log(dogName);//输出:undefinedconsole.log(adventurer.someNonExistentMethod?.());//output:undefinedfunctioncall:letresult=someInterface.customMethod?.();//如果你想让someInterface也为null或者undefined,那么你需要写someInterface?.customMethod?.()可选链和像这样的表达式:letnestedProp=obj?.['prop'+'Name'];可选链访问数组:letarrayItem=arr?.[42];示例:让myMap=newMap();myMap.set("foo",{name:"baz",desc:"inga"});让nameBar=myMap.get("bar")?.name;在没有bar成员的Map中查找bar成员的name属性,因此结果未定义。可选链操作:letcustomer={name:"Carl",details:{age:82,location:"ParadiseFalls"//details的地址属性未定义}};letcustomerCity=customer.details?.address?。城市;//...可选链接也可以与函数调用一起使用letduration=vacations.trip?.getTime?.();空合并运算符可以在使用可选链接时设置默认值:letcustomer={name:"open",details:{age:98}};让customerCity=customer?.city??“666”;console.log(customerCity);//output:666使用这个操作符,有几点需要注意:(1)短路机制a?.[++x]//等价于a==null?undefined:a[++x]上面代码中,如果a是undefined或者null,那么x不会进行自增操作。即链式判断运算符一旦为真,就不再对右边的表达式进行求值。(2)括号(a?.b).c//的作用等价于(a==null?undefined:a.b).c上面代码中,?。对括号外没有影响,无论对象是否存在。始终执行括号后的.c。一般而言,使用?时不应使用括号。操作员。(3)右边不能是十进制值为了保证和前面的代码兼容,foo?。3:0可以被解析成foo吗?.3:0,所以规定如果?.后跟一个十进制数,然后是?。不再被视为完整的运算符,而将作为三元运算符处理,即小数点归于后面的小数位,组成小数。
