Динамический JavaScript If Statement - PullRequest
3 голосов
/ 11 января 2010

В PHP я могу сделать:

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

Таким образом, приведенное выше утверждение вернет false.

Могу ли я сделать что-то подобное в JavaScript? Спасибо!

Даррен.

Ответы [ 4 ]

20 голосов
/ 11 января 2010

Если вы хотите избежать eval, и поскольку в JavaScript есть только 8 операторов сравнения , довольно просто написать небольшую функцию, вообще не используя 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
8 голосов
/ 11 января 2010

Да, в javascript также есть eval. для большинства случаев его использование не считается хорошей практикой, но я не могу себе представить, что оно тоже в php.

var post = 10, logic = '>', value = 100;
var valid = eval(post + logic + value);
1 голос
/ 24 сентября 2016

Немного поздно, но вы могли бы сделать следующее:

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;}));
1 голос
/ 11 января 2010

JavaScript также имеет функцию eval: http://www.w3schools.com/jsref/jsref_eval.asp

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