检测变量是否已用于赋值

gip*_*ani 0 javascript

我正在开发一个动态表单,其中定义的单元格可以:

  • 包含用户直接输入的值
  • 定义为公式(禁用用户输入)。

我需要一种向用户提供提示的方法,突出显示他/她必须填写以获得有效表单的单元格。

在其他作品中我可以

cellA -> 用户输入 cellB -> 用户输入 cellC -> 公式 = cellA + cellB cellA 和 cellB 是必需的(突出显示)。这种情况很容易处理。

我也可以有更复杂的公式,称之为脚本。例如

cellC =
    if(cellD == true)
    {
        cellC = cellA;
    }
    else 
    {
        cellC = cellB;
    }
Run Code Online (Sandbox Code Playgroud)

我想知道在 javascript 中是否可以理解 vars cellA 和 cellB 是否已被用作任何分配中的正确部分。

T.J*_*der 5

我想知道在 javascript 中是否可以理解 vars cellA 和 cellB 是否已被用作任何分配中的正确部分。

不,你不能挂钩这样读取的变量

但是,您可以使它们成为对象的访问器属性,这将为您提供一种方法:

const used = { a: false, b: false, c: false};
const values = { };
const cells = {
    get a() {
        used.a = true;
        return values.a;
    },
    set a(value) {
        values.a = value;
    },
    
    get b() {
        used.b = true;
        return values.b;
    },
    set b(value) {
        values.b = value;
    },
    
    get c() {
        used.c = true;
        return values.c;
    },
    set c(value) {
        values.c = value;
    }
};

// You'd only give `cells` to the code doing this, so it doesn' thave
// access to `used` or `values`.
cells.a = 2;
cells.b = 21;
const result = cells.a * cells.b;
console.log("result: " + result);
console.log("a used? " + used.a);
console.log("b used? " + used.b);
console.log("c used? " + used.c);
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用Proxy做类似的事情。

或者,如果您不担心其他代码可以访问这些标志和值,您可以将标志和值存储在对象本身上。(或者使用类实例和私有字段,它们现在正在 JavaScript 引擎中实现......)