2010-06-27 34 views
30

Bây giờ, trước khi tất cả các bạn nhảy vào tôi và nói "bạn lo ngại về hiệu suất", hãy nói rằng tôi yêu cầu điều này nhiều hơn sự tò mò hơn là một bản chất quá mức. Điều đó nói rằng ...Javascript && toán tử so với lồng nhau nếu câu lệnh: nhanh hơn là gì?

Tôi tò mò nếu có sự khác biệt về hiệu suất giữa việc sử dụng toán tử & & ("và") và lồng nhau nếu câu lệnh. Ngoài ra, có sự khác biệt về xử lý thực tế không? I.e., không & & luôn luôn quá trình cả hai tuyên bố hoặc sẽ dừng @ câu lệnh đầu tiên nếu câu hỏi đầu tiên không thành công? Làm thế nào mà sẽ khác với lồng nhau nếu phát biểu?

Ví dụ để làm rõ:

A) & & ("và") điều hành

if(a == b && c == d) { ...perform some code fashizzle... } 

so với B) lồng nhau nếu phát biểu

if(a == b) { 
    if(c == d) { ...perform some code fashizzle... } 
} 

Trả lời

29

Sự khác biệt hiệu suất là không đáng kể. Toán tử && sẽ không kiểm tra biểu thức tay phải khi biểu thức tay trái đánh giá false. Tuy nhiên, nhà điều hành & sẽ kiểm tra cả hai bất kể, có thể sự nhầm lẫn của bạn là do thực tế này.

Trong ví dụ cụ thể này, tôi chỉ chọn một hình ảnh sử dụng &&, vì đó là điều dễ đọc hơn.

+1

Không nhận thức được sự cố và người điều khiển. Nó thật thú vị! –

+14

Lưu ý rằng '&' là/bitwise/và toán tử. Nghĩ về nó như một phiên bản 'buộc' của '&& 'không hoàn toàn chính xác. Ví dụ: '1 && 2' là 2 trong khi' 1 & 2' là 0. –

2

Giống như lồng if s, && là lười biếng.
Biểu thức a && b sẽ chỉ đánh giá b nếu a là trung thực.

Do đó, hai trường hợp phải hoàn toàn giống hệt nhau, cả về chức năng và hiệu suất.

+2

Bạn có thể có nghĩa là "sẽ chỉ đánh giá b nếu một là trung thực". –

11

Nếu bạn lo ngại về hiệu suất, hãy đảm bảo rằng a==b có nhiều khả năng bị lỗi hơn c==d. Bằng cách đó, tuyên bố if sẽ không thành công sớm.

+1

Ai đó có thể làm sáng tỏ lý do tại sao tôi nhận được phiếu bầu xuống trên câu trả lời của tôi? –

+0

Tôi không biết - đề xuất của bạn có vẻ ổn với tôi nên tôi đã bình chọn cho bạn. –

+0

Tôi đoán là -1 là bởi vì nó không * reeaally * giải quyết các câu hỏi, đó là một sự tò mò về một điểm cụ thể của Javascript, chứ không phải là tối ưu hóa chung. – Matchu

1

Xét nghiệm peformance có thể giúp mọi việc rõ ràng lên: http://jsperf.com/simey-if-vs-if

Có vẻ sự khác biệt hiệu suất là cực kỳ không đáng kể giữa hai; Tuy nhiên như @Gert đã đề cập, không sớm cải thiện mọi thứ.

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