如何在JavaScript变量已定义且不为false时获取该变量
解决方案
你的原有代码存在两个核心问题:
- 无法正确根据传入的变量名字符串获取实际变量值,导致判断逻辑完全偏离预期;
- 判断条件
if(result)会将false、0、空字符串等所有假值都视为不满足,但你需要的是仅排除false,同时确保变量已被定义(值不为undefined)。
推荐实现方式(安全且灵活)
使用回调函数获取变量值,避免作用域和安全问题:
function waitForCondition(getValue) { return new Promise((resolve) => { function check() { const value = getValue(); // 仅当变量已定义且值不为false时返回 if (value !== undefined && value !== false) { resolve(value); } else { setTimeout(check, 100); } } // 立即执行第一次检查 check(); }); }
使用示例:
let variable = false; waitForCondition(() => variable).then(res => console.log(res)); // 不会立即触发 variable = 123; // 100ms内赋值后,会返回123并打印
支持变量名字符串的实现(需注意作用域)
如果必须通过变量名字符串获取值,可以使用eval(注意:仅在信任的环境下使用,避免注入风险):
function waitForCondition(varName) { return new Promise((resolve) => { function check() { let value; try { // 通过变量名获取对应值 value = eval(varName); } catch (e) { // 变量未定义时设为undefined value = undefined; } if (value !== undefined && value !== false) { resolve(value); } else { setTimeout(check, 100); } } check(); }); }
使用示例:
let variable = false; waitForCondition('variable').then(res => console.log(res)); variable = 123;
关键逻辑说明
- 判断条件
value !== undefined && value !== false确保:- 变量已被定义(不会因变量未声明而报错);
- 变量值不为
false,其他值(包括0、空字符串、null等)都可以正常返回;
- 使用
setTimeout轮询检查,直到满足条件后通过resolve返回变量值。
内容的提问来源于stack exchange,提问作者user18102663
相关产品推荐
相关产品推荐

