javascript - 在 Javascript 中调用它之前确保嵌套对象值存在的最佳方法

标签 javascript reactjs ecmascript-6

<分区>

例如:

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/

相关文章:

javascript未捕获类型错误函数ajax

javascript - ThreeJS r68 中不可变的 Object3D 属性

reactjs - Auth0。如何获取访问 token 中用户的权限?

javascript - React Router v4 全局不匹配嵌套路由子项

javascript - TS错误: Type 'unknown' is not assignable to type 'FunctionComponent<any> due to withRouter

javascript - jQuery.when() 和 ES6 的 Promise.all() 有什么区别?

javascript - 超出最大更新深度。当组件重复调用 setState 时可能会发生这种情况

javascript - 使用 getelementbyid 时未应用 Div 样式

reactjs - 为什么调试器要求我再次弹出?

javascript - setState 不会立即更新状态