计算后逻辑运算符失败

Logical operator fails after a computation

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));

(如果您完全确定输入的来源可靠,则不需要进行替换,但无论如何这样做可能是个好主意)