逻辑运算符在计算后失败

var sub_response_type = {"survey_question":["Test lable"],"responseTypeText":"Exit label","select_param_type":[">","<"],"questions_id":["7","8"],"select_param_value":["12","34"],"radio_type":["&&"]};

    var order = ['questions_id', 'select_param_type', 'select_param_value', 'radio_type'];
    var result = [];
    var i = 0;
    
    do result.push(...order.map(k => sub_response_type[k][i]));
    while (sub_response_type.radio_type[i++])

    result = result.join(' ');
    console.log("results: ", result);
    
    if (result) {
        console.log("True");
    }else{
        console.log("False");
    }

我想使用 result 上面的格式是 7 > 12 && 8 < 34 在后面的if语句中执行它进行比较。

在这种情况下,它应该输出false,因为 7 > 12 && 8 < 34 这使用逻辑运算符执行为false。

但不知为什么,它的输出结果是true。

有谁知道我遗漏了什么?

解决方案:

你所拥有的是字面上的字符串 ' 7 > 12 && 8 < 34 ',而非空字符串是真实的,所以你会得到 true.

如果你想把它作为一个Javascript表达式来评估,首先要删除所有可能导致任意代码执行的字符,比如说,数字和你想允许的操作符,删除所有其他字符,然后再删除 eval 它。

var sub_response_type = {
  "survey_question": ["Test lable"],
  "responseTypeText": "Exit label",
  "select_param_type": [">", "<"],
  "questions_id": ["7", "8"],
  "select_param_value": ["12", "34"],
  "radio_type": ["&&"]
};

var order = ['questions_id', 'select_param_type', 'select_param_value', 'radio_type'];
var result = [];
var i = 0;

do result.push(...order.map(k => sub_response_type[k][i]));
while (sub_response_type.radio_type[i++]);

const origStr = result.join(' ');
const safeStr = origStr.replace(/[^\d&>< ]+/g, '');
console.log(safeStr);
console.log(eval(safeStr));

给TA打赏
共{{data.count}}人
人已打赏
未分类

获取任何月份中没有周六和周日的天数?[关闭]

2022-9-8 20:10:40

未分类

从地图中获取中心点,并改变边界

2022-9-8 20:21:36

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索