Javascript:如果变量符合在另一个变量上定义的条件

Javascript: If variable mets a condittion defined on another variable

本文关键字:变量 定义 条件 另一个 如果 Javascript      更新时间:2023-09-26

我的问题很简单,但我找不到让thag在中工作的方法

其想法是,如果一个变量(数(满足另一个变量上定义的条件(秒(,则运行一些代码

示例:

var cond = '> 4';
var number = 5;
// Some type of if statement to check if 5 is > 4 

可以使用eval,但通常如果使用eval,则说明您无法正确理解问题。

var cond = '> 4';
var number = 5;
if (eval(number + cond)) {
  console.log(number + cond);
}

另一种可能性是创建与条件相关的函数,然后将操作数存储在另一个变量中。

var compareFunctions = {
  '>': function(a, b) {
    return a > b;
  }
};
var op = '>';
var operand = 4;
var number = 5;
if (compareFunctions[op](number, operand)) {
  console.log(number + op + operand);
}

你是这样的意思吗?

   if (eval(number+cond)){
      console.log("success");
   }

您可以使用一个函数来检查条件。

var cond = function (x) { return x > 4; };
var number = 5;
console.log(cond(number));

简单但可能危险且丑陋的方法是使用eval()

var cond = '> 5';
console.log(eval(4 + cond));
console.log(eval(6 + cond));

然而,这是危险的,因为如果该字符串以任何方式来自用户,他们可能会输入不好的东西,并导致不好的事情发生。

处理它的一个更合适的方法是正确地解析它:

let cond = '> 5';
const evaluateCondition = (value, condition) => {
  // Allows for >, <, >=, <=, !=, ==
  let [, operator, operand] = condition.match(/^'s*(>|<|>=|<=|!=|==)'s*('d+)$/);
  switch(operator) {
      case '>':
        return value > operand;
      case '<':
        return value < operand;
      case '==':
        return value == operand;
      // ... implement other operators here
  }
};
console.log(evaluateCondition(4, cond));
console.log(evaluateCondition(6, cond));

这将允许您定义有效的运算符并以安全的方式处理它们,还可以轻松捕获无效输入。


以下是在编辑更改问题之前完成的。

您必须声明它外部的变量,但您可以很容易地设置它。我要使用的语法如下:

var a = 5, b;
a == 5 && (b = 2);

&&之后的位仅在第一个条件为真的情况下执行。要用这样的语法设置变量,只需将其括在括号中即可。

更传统的方法是使用if语句:

var a = 5, b;
if (a == 5) {
    b = 2;
}

如果您在if语句内部声明第二个变量,那么它不存在于它的外部:

var a = 5;
if (a == 5) {
    var b = 2;
}
console.log(b) // undefined

这可能是绊倒你的原因。

您可以使用eval,只要小心并确保您首先阅读了eval:

var cond = '> 4';
var number = 5;
console.log(eval(("" + number + cond)));