首页 > 其他分享 >【快应用】快应用中如何避免读取undefined变量的属性时导致的报错

【快应用】快应用中如何避免读取undefined变量的属性时导致的报错

时间:2022-12-14 11:00:41浏览次数:70  
标签:tmp && undefined checkEmpty args ret 报错 应用 let

现象描述

在JS开发过程中,经常出现一种错误:即读取一个值为null或者undefined变量的属性时,出现错误提示。例如hello.ux中有如下错误代码:

<!-- a = {}; -->

<text>{{ a.b.c }}</text>

<!-- Error: Cannot read property 'c' of undefined -->

 

解决方法

可以通过如下两种方案进行处理:

【方案一】使用&&,通过逻辑运算的执行顺序来规避错误。修改的代码如下:

<text>{{ a && a.b && a.b.c }}</text>

【方案二】推荐使用此方案。在ViewModel上增加函数方法,例如增加一个checkEmpty的函数,示例代码如下:

export default {

checkEmpty(...args) {

let ret

if (args.length > 0) {

ret = args.shift()

let tmp

while (ret && args.length > 0) {

tmp = args.shift()

ret = ret[tmp]

}

}

return ret || false

}

}

这样在获取属性的地方就可以方便的调用此方法,修改后代码如下:

<text>{{checkEmpty(a, 'b', 'c')}}</text>

hello.ux代码:

<template>

<!-- Only one root node is allowed in template. -->

<div class="container">

<text>{{ checkEmpty(a, "b", "c") }}</text>

</div>

</template>

<style>

.container {

flex-direction: column;

justify-content: center;

align-items: center;

}

.body {

font-size: 35px;

}

</style>

<script>

module.exports = {

data: {

componentData: {},

url: ''

},

checkEmpty(...args) {

let ret

if (args.length > 0) {

ret = args.shift()

let tmp

while (ret && args.length > 0) {

tmp = args.shift()

ret = ret[tmp]

}

}

return ret || false

}

}

</script>
欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh

标签:tmp,&&,undefined,checkEmpty,args,ret,报错,应用,let
From: https://www.cnblogs.com/developer-huawei/p/16981502.html

相关文章