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
相关产品推荐
相关产品推荐

