uni-app 无法直接使用下标提取由函数split返回的非空数组元素
uni-app 无法直接使用下标提取由函数split返回的非空数组元素
示例代码:
const test = "标题:内容,标题2:内容2,标题3:内容3"
let desc_list = test.split(',')
console.log(typeof(desc_list))
if (desc_list.length > 0){
const describes = []
desc_list.forEach((item) => {
const desc_obj_str = item.split(':')
console.log(desc_obj_str)
console.log(typeof(desc_obj_str))
console.log(desc_obj_str.length)
obj_L = desc_obj_str[0] //此行代码及以下代码不执行,本整段代码在浏览器中能正常执行
console.log(obj_L)
obj_R = desc_obj_str[1]
console.log(obj_R)
const desc_obj = {obj_L:obj_R}
describes.push(desc_obj)
})
console.log(describes)
}
复制上段代码到.vue文件的script标签中运行。
预期结果:
使用下标能提取由函数split返回的非空数组元素
实际结果:
不能使用下标提取由函数split返回的非空数组元素
bug描述:
HBuilderX运行以下代码示例,不能使用下标获取到split函数返回的非空数组元素。把此段代码复制到浏览器中运行则没问题。
信息 | 值 |
---|---|
产品分类 | HbuilderX |
PC开发环境 | Windows |
操作系统版本 | Windows 10 专业版 |
版本号 | 3.96 |
这一行 obj_L 没有定义,会报错
obj_L = desc_obj_str[0] //此行代码及以下代码不执行,本整段代码在浏览器中能正常执行
哦,谢谢,编译器也没报错啊
const desc_obj = {desc_obj_str[0]:desc_obj_str[1]} 这种赋值为啥不行呢?
回复 1***@163.com: 这样写 let desc_obj = {} Object.defineProperty(desc_obj,desc_obj_str[0],{ value:desc_obj_str[1] })
回复 喜欢技术的前端: 多谢啦。上面没定义变量编译器也没报错,写惯了Python自己都检查不出来。
回复 1***@163.com: 客气(●’◡’●)
在 uni-app
中,如果你使用 split
方法将一个字符串分割成数组,然后尝试通过下标直接访问数组元素时,可能会遇到一些问题。特别是当数组为空或下标越界时,可能会导致错误或不预期的行为。
问题描述
假设你有一个字符串,使用 split
方法将其分割成数组,然后尝试通过下标访问数组元素:
let str = "apple,banana,orange";
let arr = str.split(',');
// 尝试访问第一个元素
let firstElement = arr[0];
console.log(firstElement); // 输出: "apple"
这个例子中,arr[0]
可以正常访问,因为 arr
是一个非空数组。但是,如果 split
返回的数组为空,或者你尝试访问一个不存在的下标,就会导致问题。
解决方案
为了避免直接通过下标访问数组元素时可能出现的错误,你可以先检查数组是否为空,或者使用可选链操作符(?.
)来安全地访问数组元素。
1. 检查数组是否为空
在访问数组元素之前,先检查数组的长度:
let str = "apple,banana,orange";
let arr = str.split(',');
if (arr.length > 0) {
let firstElement = arr[0];
console.log(firstElement); // 输出: "apple"
} else {
console.log("数组为空");
}
2. 使用可选链操作符
可选链操作符(?.
)可以在访问数组元素时避免因数组为空或下标越界而导致的错误:
let str = "apple,banana,orange";
let arr = str.split(',');
let firstElement = arr?.[0];
console.log(firstElement); // 输出: "apple"