2013-03-11 23 views
13

Vì vậy, một lập trình viên cơ sở trong nhóm của tôi hôm nay đã viết đoạn mã sau:kiểm tra một giá trị biến sử dụng một nhà điều hành HOẶC

if(status === ("incomplete" || "unknown")) 

Đó là rõ ràng là sẽ không làm những gì ông dự định, mà là thế này:

if(status === "incomplete" || status === "unknown")) 

Nhưng những gì tôi không thể giải thích là lý do chính xác đoạn mã đầu tiên sẽ không hoạt động! Hoặc lý do tại sao nó đánh giá đúng nếu 'trạng thái' được đặt thành 'chưa hoàn thành' nhưng thành false khi được đặt thành 'không xác định' ...

Trả lời

20

Trong JavaScript, toán tử || trả về toán hạng đầu tiên nếu nó đánh giá true (tức là nó không phải là false, null, undefined, "" hoặc 0) và toán hạng thứ hai của nó.

Trong trường hợp đầu tiên, ("incomplete" || "unknown") luôn đánh giá là "incomplete", vì nó được đánh giá là đúng.

Toàn bộ tình trạng sau đó trở thành:

if (status === "incomplete") 

nào giải thích hành vi mà bạn đang quan sát.

+0

+1 - bạn đã nhanh hơn 9 giây với câu trả lời đầy đủ. Wow. – insertusernamehere

+2

"... trả về toán hạng đầu tiên nếu nó đánh giá' true' ... "Tôi muốn thay đổi nó để nói" trả về toán hạng đầu tiên nếu nó đúng ", parenthetical của bạn về cơ bản giải thích điều này, nhưng" truthy "và" falsey "là những từ được sử dụng phổ biến nhất để thể hiện khái niệm này. – zzzzBov

+0

Tôi thường sử dụng các từ "trung thực" và "falsey", mặc dù tôi thấy rằng chúng thường gây nhầm lẫn cho những người mới đến. Nhưng có, đó là chính xác những gì tôi có ý nghĩa. –

6

("incomplete" || "unknown") sẽ trả lại "incomplete" so với status.

3

Nhưng những gì tôi không thể giải thích là tại sao chính xác status === ("incomplete" || "unknown") sẽ không hoạt động

Đó là bởi vì sự biểu hiện trong ngoặc đơn được đánh giá đầu tiên. Chuỗi không trống incomplete là trung thực, do đó, OR-expression("incomplete" || "unknown") sản lượng "incomplete" và chỉ số đó sau đó được so sánh với biến số status của bạn.

Để rút ngắn điều kiện, there are many ways bao gồm mảng giá trị, kiểm tra biểu thức chính quy, v.v.

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