将字符串转换为 javascript 中的操作
Translate String to operation in javascript
有没有办法翻译类似以下逻辑操作(由于用户输入而使用字符串)?还是我必须检查每一种可能性? (> < => == =< 等)
var x = 5;
var y = 3;
var operator = '>'
if (x operator y)
doSomething();
|
|
v
if (x > y)
doSomething();
你可以使用 eval,只要你知道它是邪恶的。尽管您绝对应该检查输入是否有效,例如检查它是否仅包含 '><=' 字符。
是的,有一个对象和适当的功能,比如
var comparer = {
'>': function (a, b) { return a > b; }
};
使用:
if (comparer[operator](x, y)) {
doSomething();
}
你应该改变你的方式。
使用 eval
时,您必须将所有运算符列入白名单并清理两个输入。
根据您的需要构建您自己的界面。
可能会 switch
:
switch (operator) {
case '>': if (x > y) doSomething();
}
可能更抽象一些像:
ifArg(x).relatedWith(y).as(operator).then(doSomething);
您甚至可以编写自己的小型解释器(parser/lexer),您的用户可以在上面编写程序。
It will be used in an web application where users can create there own
small (simple) applications for the use of data. – Mathieu Brouwers
你不应该在这里使用的是eval
。
有没有办法翻译类似以下逻辑操作(由于用户输入而使用字符串)?还是我必须检查每一种可能性? (> < => == =< 等)
var x = 5;
var y = 3;
var operator = '>'
if (x operator y)
doSomething();
|
|
v
if (x > y)
doSomething();
你可以使用 eval,只要你知道它是邪恶的。尽管您绝对应该检查输入是否有效,例如检查它是否仅包含 '><=' 字符。
是的,有一个对象和适当的功能,比如
var comparer = {
'>': function (a, b) { return a > b; }
};
使用:
if (comparer[operator](x, y)) {
doSomething();
}
你应该改变你的方式。
使用 eval
时,您必须将所有运算符列入白名单并清理两个输入。
根据您的需要构建您自己的界面。
可能会 switch
:
switch (operator) {
case '>': if (x > y) doSomething();
}
可能更抽象一些像:
ifArg(x).relatedWith(y).as(operator).then(doSomething);
您甚至可以编写自己的小型解释器(parser/lexer),您的用户可以在上面编写程序。
It will be used in an web application where users can create there own small (simple) applications for the use of data. – Mathieu Brouwers
你不应该在这里使用的是eval
。