javascript - 如何根据 JavaScript 中基于字符串的表达式返回 true 或 false?

标签 javascript

我需要根据传递到 json 对象的字符串值创建动态验证器。假设您有以下字符串:

var required: "Homes > 0"

在此示例中,“Homes”是我的函数中的一个可访问对象。我想从逻辑上把上面的变成:

if (this.Homes > 0) { return true; }

分部分思考这个问题:

if (this[left] > parsed[right]) { return true; }

我想你明白了。我不确定是否有一种方法可以轻松提取运算符,而无需为每种类型进行切换?如:

required: "Homes = 0" // this[Left] === 0

我将通过操作符上的 switch case 以一种非常可怕、丑陋的字符串分割方式来完成此操作。只是想知道是否有一种 super 巧妙的方法可以使这样的东西变得强大。

最佳答案

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval

eval('Homes > 0');

但请考虑改用此模式:

function Class(){
     this.validate = function(){
         return true;
     }
}

var x = new Class();
//overload the validate operator
x.validate = function(){
    return false;
}

您希望避免 eval,因为它可能不安全,因为它允许任意代码执行。

关于javascript - 如何根据 JavaScript 中基于字符串的表达式返回 true 或 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45927725/

相关文章:

javascript - 如何在 Javascript 中从 JSON 数组对象读取数据

javascript - 如何将额外参数传递给事件处理回调?

javascript - 在提交时将日期格式从 dd M yy 更改为 "2015-01-28T00:00:00+00:00"datepicker

JavaScript/HTML - 警告框先于声音?

javascript - 使背景图像在悬停时变暗

javascript - 错误 [ERR_STREAM_WRITE_AFTER_END] : write after end

javascript - 如何降低这个函数的圈复杂度?

javascript - VSCode如何禁用/删除 "react/cjs/react.development"自动完成

javascript setInterval 在 jquery 中不重复

javascript - 在 <option> 或 .val() 中为国家/地区赋值