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

jQuery中检查名称含变量的未定义变量,规避引用错误

解决jQuery循环中eval访问未定义变量报错的问题

你的问题核心在于eval("leafWId"+m)遇到未定义变量时会直接抛出引用错误,导致后续的条件判断根本没机会执行。这里有几种更安全的解决方案,完全可以替代eval的用法:

方法1:通过window对象安全访问变量

全局作用域下的变量会挂载到window对象上,我们可以通过属性访问的方式获取变量值,即使变量不存在也只会返回undefined,不会报错:

for (let m = 1; m <= 6; m++) {
  // 用属性访问代替eval,安全获取变量值
  const leafId = window["leafWId" + m];
  // 只有变量存在时才执行操作
  if (leafId !== undefined) {
    $("#po" + leafId).prop("selectedIndex", 0);
  }
}

方法2:直接检查目标元素是否存在

既然最终目的是操作#poXXX对应的select元素,我们可以跳过变量检查,直接验证元素是否存在。jQuery对空对象执行方法不会报错,所以甚至可以简化代码:

for (let m = 1; m <= 6; m++) {
  const leafId = window["leafWId" + m];
  // 直接获取元素,存在则执行操作,空对象执行prop不会报错
  $("#po" + leafId).prop("selectedIndex", 0);
}

如果想更严谨一点,也可以先判断元素长度:

for (let m = 1; m <= 6; m++) {
  const $select = $("#po" + window["leafWId" + m]);
  if ($select.length > 0) {
    $select.prop("selectedIndex", 0);
  }
}

为什么不推荐用eval?

eval不仅存在性能损耗,而且会直接执行字符串代码,在变量未定义时会直接抛出错误中断流程,用属性访问的方式既安全又可控,完全能满足你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:58:10