2011-12-21 30 views
5

Đó là nhanh hơn:Đó là nhanh hơn: if (var == 'giá trị') HOẶC if (/value/.test(var))

if (var == 'value') 

hoặc

if (/value/.test(var)) 
+3

Thay vì hỏi cái nào là nhanh hơn, bạn nên xem xét cái nào là rõ ràng hơn, rõ ràng hơn , và chính xác (tôi giả sử có một số khác biệt cho các giá trị không phải chuỗi). – delnan

+0

Hai thao tác này không thực hiện tương tự. Chọn cái thích hợp cho tác vụ và không tối ưu hóa sớm. – zzzzBov

+0

Nhìn vào đó http://jsperf.com/regex-vs-string-equals/2 :-) –

Trả lời

6

if (a == 'b') sẽ nhanh hơn if (/b/.test(a)), nhưng chúng không phải là cuộc gọi giống nhau.

'something' == 'some'false, trong khi /some/.test('something')true.

Lý do duy nhất để thay đổi từ người này sang người khác là nếu người kia thích hợp hơn. Nếu bạn lo lắng về tốc độ, hãy đánh giá kịch bản của bạn và kiểm tra xem các nút cổ chai ở đâu trước khi lo lắng về tuyên bố cụ thể của if.

+0

Cảm ơn tất cả! Các bình luận và trả lời đã giúp rất nhiều. – Upworks

8

if(var == 'value'). Bởi rất nhiều. Nhưng nếu bạn thực sự muốn nhanh, hãy làm if(var === 'value'). Tương đương nghiêm ngặt có ít việc phải làm hơn so với loại tương đương cưỡng chế.

+1

Nhưng '===' là nghiêm ngặt hơn '==', do đó, nó không thực sự là một thay thế thả. – Blender

+0

@Blender: Nó gần giống với hai thứ mà OP đã chỉ định. – chaos

+0

Nó thực sự không phải "Bởi rất nhiều" ... – jondavidjohn

1

Không phải là một sự khác biệt tốc độ lớn, nhưng trước đây chắc chắn dễ đọc hơn là gì và có ý nghĩa hơn ...

http://jsperf.com/string-vs-regex-test/2

+0

dang bạn đánh tôi đến jsperf! –

+0

Kiểm tra đó không hoàn toàn phù hợp với trường hợp của OP (ngay cả khi chúng tôi giả định rằng anh ta có nghĩa là '/^value $ /. Test (var)'). Tương đương kém vì thử nghiệm là so sánh không phân biệt dạng chữ, do đó các phép thử được gọi là '==' và '===' thực sự hấp thụ chi phí (khá nặng) của 'toLowerCase()'. – chaos

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