HarmonyOS鸿蒙Next中快应用如何避免读取undefined变量的属性时导致的报错

HarmonyOS鸿蒙Next中快应用如何避免读取undefined变量的属性时导致的报错

现象描述

在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>

更多关于HarmonyOS鸿蒙Next中快应用如何避免读取undefined变量的属性时导致的报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS鸿蒙Next中快应用如何避免读取undefined变量的属性时导致的报错的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,避免读取undefined变量的属性导致的报错,可以通过以下几种方式:

  1. 条件判断:使用if语句检查变量是否为undefined
  2. 可选链操作符:使用?.操作符,避免直接访问undefinednull的属性。
  3. 默认值:使用||??操作符为变量提供默认值。
  4. try-catch:在可能出错的地方使用try-catch捕获异常。

例如:

let obj = undefined;
let value = obj?.property || 'default';

通过这些方法可以有效避免报错,提升代码健壮性。

回到顶部