抓住一个物体的属性

时间:2018-03-16 00:52:31

标签: javascript

我有一个对象comments。在某些情况下可以未定义,在其他情况下看起来像

{
  id: 1,
  ...,
  next_page: 'someurl' // can also be undefined in some cases
}

我需要获取next_page属性(如果存在)或在其他情况下使其为空。我的代码:

let next_page = null;

if (comments && comments.next_page)
  next_page = comments.next_page

它有效,但我觉得有一些更简单的方法。我是对的吗?

3 个答案:

答案 0 :(得分:2)

是否必须为空?如果是这样,请使用:

const next_page = comments && comment.next_page || null

如果undefined也没问题,我建议:

const next_page = comments && comment.next_page

Javascript在这里表现得有些意外。如果undefined上不存在next_page,则等号的表达权右侧的结果为comment,如果确实存在comment.next_page则为next_page

编辑: 正如另一条评论所指出的那样:当null是假值时要小心,因为当comment.next_page0时,版本#1将返回initial_accumulator_value < / p>

答案 1 :(得分:0)

if()块中的表达式返回表达式的值(不是布尔值),因此您可以将其压缩为一行:

let next_page = ( comments && comments.next_page );

答案 2 :(得分:0)

如果遗失了这个属性,你可以拥有一个模板对象并且不必分配它。

const template = { id: null, nextPage: nul};
const useThis = Object.assign({}, template, dataMaybeHasNextPage)

// if dataMaybeHasNextPage object has nextPage then useThis.nextPage would a url

这样就可以设置nextPage。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

&#13;
&#13;
const defaultCommentObj = { id: null, nextPage: null};
const commentA = Object.assign({}, defaultCommentObj, {
  id: 1,
  nextPage: 'https://google.com',
});

const commentB = Object.assign({}, defaultCommentObj, {
  id: 2,
});

console.log('A : ', commentA);
console.log('B : ', commentB);
&#13;
&#13;
&#13;