计算后逻辑运算符失败
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));
(如果您完全确定输入的来源可靠,则不需要进行替换,但无论如何这样做可能是个好主意)
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));
(如果您完全确定输入的来源可靠,则不需要进行替换,但无论如何这样做可能是个好主意)