示例:页面布局要求返回数组对象,而实际情况没有按要求返回导致非自定义异常(即程序异常)抛出。
-
格式要求:
data:{ detail: [] } -
返回情况:
1 data:{};
2 data: { detail: null }
3 data: { detail: {} }
4 data: { detail: ’’ } -
报错内容:
1 data.detail会找不到detail属性
2 data.detail.length找不到length属性,即detail不是数组 -
习惯
1 返回数据为空,无法确定返回data是空对象,还是null,或者其他。如果不做校验则往下无法正常执行。
2 取值会直接取所需要的一级,如data.detail,一旦data中不包含detail对象,则往下无法正常执行。
3 在数据格式为数组的情况下,通常都会用到数组的长度属性,即array.length,如果没有检验数组,一旦格式不匹配,length则会抛出异常。 -
解决方法:
1 判断data是否存在detail属性:if(data.detail)
2 判断data.detail是否为数组:utils.isArray(data.detail)
3 加强检验,除了完全通过检验的步骤往下执行,其他的全部走容错机制。
utils:
isArray(array) {
return Object.prototype.toString.call(array) === '[object Array]' ? true : false;
}
即使已经协商好交互结构,但在开发中还是要做好容错机制,不要太过于依赖协商的定义,从而导致不必要的问题影响用户体验。
代码规范造,问题错误少。