以前我们直接取一个空对象里面的值会报错,
比如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的值,有值就会直接返回;