gpt4 book ai didi

javascript - 在 JavaScript 中创建一个基本的公式编辑器

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:22:31 24 4
gpt4 key购买 nike

我正在使用 JavaScript 和 Canvas 创建一个基本的 RPG 游戏引擎原型(prototype)。我仍在纸上制定一些设计规范,但遇到了一些我不太确定如何解决的问题。

我将有一个 Character 对象,该对象将包含一个 Attribute 对象数组。属性看起来像这样:

function(name, value){
this.name = name;
this.value = value;
...
}

Angular 色还将拥有根据属性计算的“技能”。技能值也可以由用户输入的公式来确定。一个合法的公式看起来像这样:

((@attribute1Name + (@attribute2Name / 2) * 5)

@ 符号后面的任何文本表示属于该字符的属性名称。公式将作为字符串输入到文本字段中。

我遇到的问题是理解解析和评估此公式的正确方法。最初,我的计划是对属性名称进行简单的替换并对表达式求值(如果无效,求值将失败)。但是,这会带来一个问题,因为它允许将 JavaScript 注入(inject)到该字段中。我假设我需要某种类似于中缀计算器的 FSM 来解决这个问题,但我对我的计算理论有点生疏(感谢企业界!)。我真的不是要别人把代码交给我,而是想听听你的意见,看看这个问题的最佳解决方案是什么?

编辑:感谢您的回复。不幸的是,生活让我很忙,我还没有尝试过解决方案。当我得到结果(好或坏)时会更新。

最佳答案

不同的想法,因此单独的建议:

eval() 工作正常,无需重新发明轮子。

假设您的公式语言中只有少量且固定数量的变量,扫描整个表达式并验证您遇到的所有内容都是括号、运算符或您的变量名之一就足够了。我认为没有任何方法可以将这些片段组装成一段可能对 eval 产生恶意副作用的代码。

所以:

  • 扫描表达式以验证它是否仅来自非常有限的词汇。
  • 让 eval() 解决。

可能是工作量和代码量最少的妥协,同时将风险降低到(接近?)0。在最坏的情况下,滥用者可能会在变量名上加上括号以尝试执行该变量。

关于javascript - 在 JavaScript 中创建一个基本的公式编辑器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3266161/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com