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

如何在JavaScript变量已定义且不为false时获取该变量

解决方案

你的原有代码存在两个核心问题:

  1. 无法正确根据传入的变量名字符串获取实际变量值,导致判断逻辑完全偏离预期;
  2. 判断条件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确保:
    1. 变量已被定义(不会因变量未声明而报错);
    2. 变量值不为false,其他值(包括0、空字符串、null等)都可以正常返回;
  • 使用setTimeout轮询检查,直到满足条件后通过resolve返回变量值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 09:12:52