js中的双问号和“?.“的使用

67 阅读1分钟

以前我们直接取一个空对象里面的值会报错,
比如let obj={};
直接取值obj.a.name,会报错;
所以我们一般会用obj && obj.a && obj.a.name;这样比较麻烦,现在有了?.这个方法就比较方便了;在引用为空(null或undefined) 的情况下不会报错

1.?.的使用:

let obj ={}
console.log(obj.c) //报错;
console.log(obj?.c) // undefined; 找obj里面的c的值,如果没有直接返回undefined;不会报错;

obj = {
    a:{
       name:'名字vivi'
   },
   b:'这是b值'
}
console.log(obj.a.c) // 报错
console.log(obj?.a?.c) // undefined; 找obj里面a里面的c的值,如果没有直接返回undefined;
console.log(obj?.a?.name) //名字vivi; 找obj里面a里面的name的值,直接返回值;

2.??的使用:

val1??val2
如果val1是null或者是undefined,会使用val2的值;否则会使用val1的值;

 console.log( 0??'xx')   //0;
 console.log( undefined??'xx')  //xx
 console.log( null??'xx') //xx
 console.log( 1??'xx')   //1;
 let obj = {}
 console.log( obj??'xx')   //{};
 let obj2 = null;
 console.log( obj2??'xx')   //xx;

3.两者结合使用:

obj = {
    a:{
       name:'名字vivi'
   },
   b:'这是b值'
}
console.log(obj?.a?.c??'xx') //xx  找obj里面a里面的c的值,会返回undefined,然后直接会使用后面这个值;
console.log(obj?.b??'xx') //这是b值  找obj里面b的值,有值就会直接返回;