2010-01-11 3 views
1

В PHP я могу сделать:Динамический JavaScript Если заявление

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

Так приведенное выше утверждение будет возвращать ложь.

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

Darren.

+1

Зачем вам это нужно? – James

+1

Кроме того, '$ post $ logic $ value' возвращает логическое значение, поэтому нет необходимости в'? true: false' ... – James

ответ

6

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

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

Примечание: Это небезопасно. –

16

Если вы хотите избежать eval, и так как есть только 8 comparison operators в JavaScript, достаточно просто написать небольшую функцию, без использования 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 
+0

Мне нравится бесконечность возможностей с кодировкой. Прохладный укороченный. – scaryguy

1

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

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