2015-04-14 12 views
5

Tôi muốn tính hai số và nó khá đơn giản.Cách lấy dấu cộng trong biến

Nhưng có cách nào để đưa toán tử vào biến và sau đó thực hiện tính toán không?

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

A 'tắc đơn giản ... case' sẽ làm gì. –

+0

Đây là câu trả lời cho câu hỏi của bạn - http://stackoverflow.com/questions/5834318/are-variable-operators-possible – Yellen

+1

Nếu bạn chỉ cần quyết định giữa '+' và '-' bạn cũng có thể nhân với' var p = 1' hoặc 'var p = -1'. –

Trả lời

3

Bạn đang tìm kiếm eval chức năng:

\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>

Tuy nhiên, bạn phải nhớ rằng việc sử dụng eval chức năng là khả năng rủi ro. Ví dụ, nếu được sử dụng sai cách, nó có thể cho phép người ta thực hiện các cuộc tấn công tiêm. Gỡ lỗi cũng có thể khó khăn hơn. Tôi đề nghị đọc số này question.

+0

Cảm ơn! Xong .. Sẽ chấp nhận nó sau 10 phút .. Cảm ơn bạn rất nhiều :) – Twix

+3

@Twix - hãy nhớ rằng việc sử dụng 'eval' đi kèm với một số cảnh báo - chức năng sẽ cố gắng thực hiện ** mọi mã JS JS mà nó được cung cấp. Hãy cẩn thận để đảm bảo bạn chỉ thực thi mã mà bạn dự định xác nhận rằng các biến của bạn chứa các giá trị/toán tử mà bạn có thể "tin tưởng". Hãy tưởng tượng nếu một trong các biến chứa một cái gì đó như 'alert ('gottcha!')' – Lix

7

Hoặc sử dụng parseInt trên chuỗi mà bạn sẽ có thêm biến để:

\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

Giải pháp tốt đẹp không sử dụng 'eval' – Jivings

+0

thông minh nhưng khá khó đọc/duy trì –

0

bạn có thể sử dụng eval chức năng:

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

 
alert(z);

+0

Nếu bạn muốn đề xuất sử dụng' eval' - vui lòng bao gồm cảnh báo về sự nguy hiểm của việc thực thi mã tùy ý. – Lix

15

Tránh eval bất cứ khi nào có thể. Trong ví dụ này, một tuyên bố đơn giản switch...case sẽ đủ:

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

Bạn cũng có thể sử dụng bản đồ về chức năng:

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

Tôi thực sự thích giải pháp bản đồ func ... Rất thanh lịch! – Lix

Các vấn đề liên quan