2015-04-14 7 views
5

Voglio calcolare due numeri ed è piuttosto semplice.Come prendere più segno di variabile

Ma esiste un modo per prendere l'operatore in variabile e quindi eseguire il calcolo?

var x = 5; 
 
var y = 5; 
 
var p = '+'; 
 
var z = x + p + y; 
 

 
$(".button").click(function() { 
 
    alert(z); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="button">Click ME !</div>

+2

Un semplice 'interruttore ... case' farebbe. –

+0

Ecco la risposta alla tua domanda - http://stackoverflow.com/questions/5834318/are-variable-operators-possible – Yellen

+1

Se devi solo decidere tra '+' e '-' puoi anche solo moltiplicare con' var p = 1' o 'var p = -1'. –

risposta

3

siete alla ricerca di eval funzione:

\t var x = 5; 
 
\t var y = 5; 
 
\t var p = '+'; 
 
\t var z = x + p + y; 
 

 
$(".button").click(function(){ 
 
    alert(eval(z)); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="button">Click ME !</div>

Tuttavia, si deve ricordare che l'utilizzo di eval funzione è potenzialmente rischioso. Ad esempio, se usato nel modo sbagliato può consentire a uno di fare attacchi di iniezione. Il debugging può essere anche più difficile. Suggerisco di leggere questo question.

+0

Grazie! Fatto .. Lo accetterò dopo 10 minuti .. Grazie mille :) – Twix

+3

@Twix - ricorda che l'uso di 'eval' viene fornito con alcuni avvertimenti - la funzione tenterà di eseguire ** qualsiasi ** codice JS che viene fornito. Assicurati di eseguire solo il codice che intendi convalidare che le tue variabili contengano valori/operatori che puoi "fidarti". Immagina se una delle variabili contenesse qualcosa come 'alert ('gottcha!')' – Lix

7

O uso parseInt sulla corda che verrà aggiunto alla variabile a:

\t var x = 5; 
 
\t var y = 5; 
 
\t var p = '-'; 
 
\t var z = x + parseInt(p + y); 
 

 
$(".button").click(function(){ 
 
    alert(z); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="button">Click ME !</div>

+0

Bella soluzione che non usa 'eval' – Jivings

+0

intelligente ma abbastanza difficile da leggere/mantenere –

0

è possibile utilizzare la funzione di eval:

var x = 5; 
 
var y = 5; 
 
var p = '+'; 
 
var z = eval(x + p + y); 
 

 
alert(z);

+0

Se stai suggerendo di usare 'eval' - includi appropriato avvertimenti sui pericoli dell'esecuzione di codice arbitrario. – Lix

15

Evitare eval quando possibile. Per questo esempio, una semplice dichiarazione switch...case sarà sufficiente:

var x = 5; 
var y = 5; 
var z; 
var p = "+"; 
switch (p) { 
    case "+": 
     z = x + y; 
     break; 
    case "-": 
     z = x - y; 
     break; 
} 

È anche possibile utilizzare una mappa di funzioni:

var fnlist = { 
    "+": function(a, b) { return a + b; }, 
    "-": function(a, b) { return a - b; } 
} 
var x = 5; 
var y = 5; 
var p = "+"; 
var z = fnlist[p](x, y); 
+0

Mi piace davvero la soluzione mappa funzionale ... Molto elegante! – Lix

Problemi correlati