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

如何通过用户单选输入的字符串变量获取对应JS对象的属性值

问题原因

你当前拿到的bikeSelc是字符串类型的值(比如"UA"),并不是你提前定义的UA对象本身,字符串类型没有brakes属性,所以自然无法读到对应值。你硬编码写UA.brakes是直接访问了全局作用域下的UA对象,所以可以正常运行。


最优解决方案

推荐把所有自行车配置统一存放到一个对象映射表中,映射表的key和你单选按钮返回的字符串值对应,value就是对应的配置对象,之后就可以用字符串作为key读取到对应的配置对象。

改造配置代码

// 把所有自行车配置放到统一的bikeConfig映射表里
const bikeConfig = {
  UA: {
    brakes: "shimano b10s",
    backTire: " Bigben 26",
    frontTire: "bigben 20",
    bikeChain: " 1/32 single speed",
    motorBrand: " Bosch Intuvia, cargoline",
  },
  cargoCarla: {
    brakes: "shimano b10s", // 注意你原代码里这里拼错为breaks,要和其他对象字段统一为brakes,否则会返回undefined
    backTire: "big apple 24",
    frontTire: "big apple 20",
    bikeChain: "na",
    motorBrand: "na",
  }
}

改造提交事件代码

var form = document.querySelector("form");
var log = document.querySelector("#log");
var showComponent = document.querySelector("#showComponent"); // 记得先获取你要渲染内容的DOM节点,否则会报错

form.addEventListener(
  "submit",
  function (event) {
    event.preventDefault(); // 建议把阻止默认行为放到最前面,避免页面意外跳转
    var data = new FormData(form);
    var output = "";
    for (const entry of data) {
      output = output + entry[0] + "=" + entry[1] + "\r";
    }
    var splitOut = output.split("=");
    var bikeSelc = splitOut[1].toString();
    // 从映射表里取对应的配置对象再访问属性
    const selectedBike = bikeConfig[bikeSelc]
    // 加容错判断,避免拿到不存在的车型key时报错
    if (selectedBike) {
      showComponent.textContent = selectedBike.brakes;
    } else {
      showComponent.textContent = "未找到对应车型配置"
    }
  },
  false
);

其他说明

如果你的配置对象是定义在全局作用域下,也可以用window[bikeSelc].brakes的方式读取属性,但这种方式非常不推荐,全局变量容易造成命名冲突、数据被意外修改,后续新增车型也不好维护,优先使用映射表的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:15:05