<分区>
例如:
data = {info: {name: john}}
我怎样才能确定:
const name = data.info.name
那个 name
存在,我不会得到:Can't read value name of undefined
现在我在做:
let name
if(!!data && data.info && data.info.name){
name = data.info.name
}
但是看起来很乱,想知道有没有更好的办法
<分区>
例如:
data = {info: {name: john}}
我怎样才能确定:
const name = data.info.name
那个 name
存在,我不会得到:Can't read value name of undefined
现在我在做:
let name
if(!!data && data.info && data.info.name){
name = data.info.name
}
但是看起来很乱,想知道有没有更好的办法
最佳答案
你不需要if
语句,你可以直接给表达式赋值:
const data = {info: {name: 'john'}};
const name = data && data.info && data.info.name
console.log(name);
const data2 = {};
const name2 = data2 && data2.info && data2.info.name;
console.log(name2);
您可以使用 destructuring assignment默认值:
const data = {info: {name: 'john'}};
const { info: { name } = {}} = data || {};
console.log(name);
const data2 = undefined;
const { info: { name2 } = {}} = data || {};
console.log(name2);
还有 TC39 stage 1 proposal - optional chaining ,您可以将其与 babel plugin 一起使用:
const data = {info: {name: 'john'}};
// if any part of chain is undefined, name will be undefined
const name = data?.info?.name;
关于javascript - 在 Javascript 中调用它之前确保嵌套对象值存在的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49739220/