2010-01-11 4 views
1
Déclaration

En PHP je peux faire:JavaScript dynamique Si

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

Ainsi, la déclaration ci-dessus aurait return false.

Puis-je faire quelque chose de similaire en JavaScript? Merci!

Darren.

+1

Pourquoi voudriez-vous faire cela? – James

+1

De plus, '$ post $ logic $ value' renvoie un booléen, donc pas besoin de'? true: false' ... – James

Répondre

6

oui, il y a eval javascript aussi bien. Pour la plupart des utilisations, ce n'est pas considéré comme une très bonne pratique pour l'utiliser, mais je ne peux pas imaginer qu'il soit en php non plus.

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

Note: Ce n'est pas sécuritaire. –

16

Si vous voulez éviter eval, et comme il n'y a que 8 comparison operators en JavaScript, est assez simple d'écrire une petite fonction, sans utiliser eval du tout:

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

J'aime l'infinité de possibilités avec le codage. Refroidisseur frais. – scaryguy

1

Un peu plus tard, mais vous auriez pu faire ce qui suit:

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