You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS技术问题:将含[*]的字符串转为变量名存入对象且不执行数组引用

解决方法:延迟求值,保留变量引用

我明白你的需求了——你想把字符串 "srcs[14]" 转换成变量引用的形式存入对象,但不想立即获取 srcs[14] 的实际值,只是保留这个变量的“指向关系”。eval() 之所以不行,是因为它会立刻执行表达式并返回结果,不符合你的要求。下面给你两种可行的方案:

方案一:使用Getter属性

这种方式可以让你延迟到实际访问avatar属性时才去获取srcs[14]的值,而且每次访问都会拿到最新的srcs[14]:

// 假设你的srcs数组已经在外部定义
const srcs = ['图片1', '图片2', ..., '图片14']; // 示例数组

// 构建目标对象
const nurseListSpeciality = [{
  get avatar() {
    return srcs[14];
  }
}];

// 使用方式:只有当你访问avatar时才会求值
console.log(nurseListSpeciality[0].avatar); // 此时才会获取srcs[14]的当前值

方案二:用函数包裹表达式

如果你希望手动控制求值时机,可以把表达式包裹在函数里。这样对象里存储的是一个函数,只有当你主动调用它时,才会去获取srcs[14]的值:

const exprStr = "srcs[14]"; // 从API拿到的字符串
const nurseListSpeciality = [{
  avatar: () => eval(exprStr)
}];

// 使用方式:调用函数来获取值
console.log(nurseListSpeciality[0].avatar()); // 此时才会执行eval并返回srcs[14]的值

如果担心eval的安全性,也可以用new Function来替代,它会在独立作用域中执行表达式:

const exprStr = "srcs[14]";
const getAvatar = new Function('', `return ${exprStr}`);
const nurseListSpeciality = [{
  avatar: getAvatar
}];

// 使用方式
console.log(nurseListSpeciality[0].avatar());

补充说明

  • 如果你只是想把字符串 "srcs[14]" 原封不动地存入对象,直接赋值即可:{ avatar: "srcs[14]" }——但从你的需求描述来看,你要的是变量引用而非字符串本身。
  • 两种方案都能实现“不立即执行数组引用”的核心需求,选择哪种取决于你后续的使用场景:Getter更贴近普通属性的使用体验,函数包裹则更灵活可控。

内容的提问来源于stack exchange,提问作者gileneusz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:29:54