uni-app 无法直接使用下标提取由函数split返回的非空数组元素

发布于 1周前 作者 yuanlaile 来自 Uni-App

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


7 回复

这一行 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"
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!