我正在从事 Angular 项目,我经常检查对象或其属性的 undefined
或 null
。通常我使用 lodash _.isUndefined()
看下面的例子:
this.selectedItem.filter(i => {
if(_.isUndefined(i.id)) {
this.selectedItem.pop();
}
})
我看不出有什么问题。但是我在审查上述代码时与我的同事进行了讨论。他告诉我,如果 i
在 if
语句之前得到 undefined
那么它将抛出异常。相反,他建议我总是像这样检查 i
或 i.id
:
if(!!i && !!i.id) {
this.selectedItem.pop();
}
我确信他想表达的意思与他在上面代码中检查 undefined
的方式不同。但后来我在想 lodash _.isUndefined
的目的是什么?
谁能告诉我最好或最干净的方法是什么。因为对我来说 !!i && !!i.id
根本不可读。
非常感谢。
最佳答案
您可以使用 _.isNil()
检测 undefined
或 null
。由于您使用的是 Array.filter()
,你想返回 !_.isNil()
的结果。由于 i
应该是一个对象,您可以使用 !_.isNil(i && i.id)
。
注意:您正在使用 Array.filter()
作为 Array.forEach()
. Array.filter()
的回调应该返回一个 bool 值,过滤的结果是一个新的数组。
const selectedItem = [
undefined,
{},
{ id: 5 },
undefined,
{ id: 7 },
];
const result = selectedItem.filter(i => !_.isNil(i?.id));
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
您还可以使用 _.reject()
并保存需要添加 !
:
const selectedItem = [
undefined,
{},
{ id: 5 },
undefined,
{ id: 7 },
];
const result = _.reject(selectedItem, i => _.isNil(i?.id));
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
关于javascript - 检查任何对象的 'undefined' 或 'null',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52610019/