【问题标题】:Dynamic JavaScript If Statement动态 JavaScript If 语句
【发布时间】:2011-01-03 17:28:46
【问题描述】:

在 PHP 中我可以做到:

// $post = 10; $logic = >; $value = 100
$valid = eval("return ($post $logic $value) ? true : false;");

所以上面的语句会返回 false。

我可以在 JavaScript 中做类似的事情吗?谢谢!

达伦。

【问题讨论】:

  • 你为什么要这样做?
  • 另外,$post $logic $value 返回一个布尔值,所以不需要? true : false...

标签: javascript dynamic logic eval


【解决方案1】:

如果你想避免eval,并且由于JavaScript中只有8个comparison operators,编写一个小函数相当简单,根本不使用eval

function compare(post, operator, value) {
  switch (operator) {
    case '>':   return post > value;
    case '<':   return post < value;
    case '>=':  return post >= value;
    case '<=':  return post <= value;
    case '==':  return post == value;
    case '!=':  return post != value;
    case '===': return post === value;
    case '!==': return post !== value;
  }
}
//...
compare(5, '<', 10); // true
compare(100, '>', 10); // true
compare('foo', '!=', 'bar'); // true
compare('5', '===', 5); // false

【讨论】:

  • 我喜欢编码的无限可能。很酷的起酥油。
【解决方案2】:

是的,在 javascript 中也有 eval。对于大多数用途来说,使用它并不是很好的做法,但我也无法想象它是在 php 中。

var post = 10, logic = '>', value = 100;
var valid = eval(post + logic + value);

【讨论】:

  • 注意:不安全。
【解决方案3】:

有点晚了,但你可以做到以下几点:

var dynamicCompare = function(a, b, compare){
    //do lots of common stuff

    if (compare(a, b)){
        //do your thing
    } else {
        //do your other thing
    }
}

dynamicCompare(a, b, function(input1, input2){ return input1 < input2;}));
dynamicCompare(a, b, function(input1, input2){ return input1 > input2;}));
dynamicCompare(a, b, function(input1, input2){ return input1 === input2;}));

【讨论】:

    【解决方案4】:

    JavaScript 也有一个 eval 函数: http://www.w3schools.com/jsref/jsref_eval.asp

    eval("valid = ("+post+logic+value+");");
    

    【讨论】:

      猜你喜欢
      • 2015-03-13
      • 2013-04-30
      • 2022-11-11
      • 1970-01-01
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      • 2015-05-01
      • 2016-06-21
      相关资源
      最近更新 更多