通常,在检查特定属性是否具有值时,必须遍历某些对象属性或数组。这导致了如下长语句,只是为了避免使用error can't read property ____ of undefined
。
有没有一种更简洁的方式写这个? ES6可能有东西吗?我以为我记得有些像Lodash的库提供了辅助方法,但找不到它们。
if (
user &&
user.profile.pets &&
user.profile.pets[0] &&
user.profile.pets[0].type === "dog"
) {
答案 0 :(得分:1)
Lodash有两种方法:_.has
和_.get
。
_.has(object, path)
检查path是否是对象的直接属性。
_.get(object, path, defValue)
获取对象路径处的值。如果解析的值不确定,则将返回defValue
所在的位置。
let user = {
profile: {
pets: [{ type: 'dog' }, { type: 'cat' }]
}
};
// _.has
console.log(_.has(user, 'profile.pets[0].type')); // true
console.log(_.has(user, 'profile.pets[3].type')); // false
// _.get
console.log(_.get(user, 'profile.pets[0].type')); // dog
console.log(_.get(user, 'profile.pets[3].type')); // undefined
console.log(_.get(user, 'profile.pets[3].type', 'unknown')); // unknown
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>