我有一个对象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
它有效,但我觉得有一些更简单的方法。我是对的吗?
答案 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_page
为0
时,版本#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
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;