对象属性访问问题
对象的属性在访问的时候,务必要关心 属性是否真的存在 。
特别是服务端返回的数据,如果碰到数据出错,就可能造成页面无反应、白屏等问题:
const getList = async () => {
// 假装拿了服务端的数据,并返回了
return {
code: 1,
data: {
list: null,
page: 1,
count: 1111,
},
};
};
getList()
.then((res) => {
// 取出数据
const { data } = res;
const { list, page, count } = data;
list.forEach(() => {
// 处理一些业务
});
// 抛错:TypeError: Cannot read property 'forEach' of null
// alert 不会执行
alert('获取数据成功');
});
上面这段代码,执行是会报错的,因为 list
是 null
,并不是期望的数组,这样就导致了代码无法正常执行下去。
所以在使用的时候,最好可以判断或者处理一下不可靠的数据。
// 使用 if 判断
// ...
if (list) {
list.forEach(() => {
// 处理一些业务
});
} else {
// ...
}
// ...
// 提供一个默认值
const { list = [], page, count } = data;
list.forEach(() => {
// 处理一些业务
});
// ...
// 提供一个默认值
const { list, page, count } = data;
(list || []).forEach(() => {
// 处理一些业务
});
// ...
方法还有很多,还可以封装一个函数专门用来取对象属性的值,目的就是要代码变得更加可靠,防止一些可能会造成重要后果的异常。
如在 react
组件中,如果 render
函数中抛出了错误没有处理,就可能导致组件或者页面白屏。
新的 ECMAScript
标准提供了可选链和双问号操作符来更好的处理这个问题。
const object = {
a: {
b: 2,
c: {
d: 3,
},
},
};
const f = object.a?.b?.c?.d?.e?.f ?? 10;
console.log(f); // 输出:10
关于这个知识点不再展开,可以参考 ES6+
相关的 Wiki
。
简单的说,在访问对象属性的时候,如果数据源不可靠,一定要做好处理异常的准备。
本文来自互联网用户投稿,不拥有所有权,该文观点仅代表作者本人,不代表本站立场。
访问者可将本网站提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站,邮箱:80764001@qq.com,予以删除。
访问者可将本网站提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站,邮箱:80764001@qq.com,予以删除。