2012-02-03 42 views
14

Tôi nghĩ rằng tôi thiếu một số thứ cơ bản ở đây. Tại sao điều kiện IF thứ ba lại đúng? Điều kiện không nên đánh giá sai? Tôi muốn làm điều gì đó mà id không phải là 1, 2 hoặc 3.javascript nhiều điều kiện OR trong câu lệnh IF

var id = 1; 
if(id == 1) //true  
if(id != 1) //false 
if(id != 1 || id != 2 || id != 3) //this returns true. why? 

Cảm ơn bạn.

+5

vì 'id' không bình đẳng' 2' hoặc '3'? 'false || đúng || true == true' –

+3

1! = 2 .. điều này rõ ràng là đúng .. lollzzz –

+1

vì id> 3, imo. – ddacot

Trả lời

28

Với thao tác OR (||), nếu bất kỳ điều kiện nào là đúng, kết quả là đúng.

Tôi nghĩ bạn muốn có một hoạt động AND (& &) tại đây.

+1

Cảm ơn bạn. Bây giờ tôi cảm thấy ngớ ngẩn khi hỏi câu hỏi này: (Tôi bị lẫn lộn – tempid

+14

Hà. Chúng ta đều ở đó, tin tôi đi. – Gabe

1

vì toán tử OR sẽ trả về true nếu bất kỳ điều kiện nào là đúng và trong mã của bạn có hai điều kiện đúng.

3

Mỗi phòng trong số ba điều kiện được đánh giá một cách độc lập [1]:

id != 1 // false 
id != 2 // true 
id != 3 // true 

Sau đó, nó đánh giá false || true || true, đó là sự thật (a || b là đúng nếu một trong hai a hoặc b là đúng). Tôi nghĩ rằng bạn muốn

id != 1 && id != 2 && id != 3 

đó chỉ đúng nếu ID không phải là 1 AND nó không phải là 2 VÀ nó không phải 3.

[1]: Đây là không đúng sự thật, nhìn lên short-circuit evaluation. Trong thực tế, chỉ hai mệnh đề đầu tiên được đánh giá bởi vì đó là tất cả những gì cần thiết để xác định giá trị chân lý của biểu thức.

1

Khi kiểm tra id! = 2 nó trả về true và dừng lại tiếp tục kiểm tra

+1

Điều này cũng quan trọng cần lưu ý; nó có ích nếu bạn cần xem một đối tượng tồn tại trước khi kiểm tra một tham số hay không. 'if (obj! = null && obj.field == 2)' –

+0

-1 - Một điểm phụ thú vị, nhưng không phải là vấn đề gốc. – user66001

16

Bạn muốn thực thi mã nơi id không phải là (1 hoặc 2 hoặc 3), nhưng các toán tử OR không phân phối trên id. Cách duy nhất để nói những gì bạn muốn là để nói

id không phải là 1, và id không phải là 2, và id không phải là 3.

mà dịch để

if (id !== 1 && id !== 2 && id !== 3) 

hoặc cách khác cho một cái gì đó hơn pythonesque:

if (!(id in [,1,2,3])) 
+7

+1 cho cấu trúc đáy. – user66001

+0

Kiểm tra thay thế cho chỉ mục. Không nếu giá trị nằm trong mảng. Không giống như trong python, nơi nó kiểm tra giá trị. 'array.indexOf (id) == -1' có nghĩa là id không nằm trong mảng. sử dụng '! =' đối diện. – Neil

+0

@NeilDesh, lưu ý ',' ngay từ đầu. Chúng tương đương với –

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