2010-01-25 29 views
17

Which equals operator (== vs ===) should be used in JavaScript comparisons? cho biết chúng về cơ bản giống hệt nhau ngoại trừ '===' cũng đảm bảo sự bình đẳng về loại và do đó '==' có thể thực hiện chuyển đổi loại. Trong số JavaScript của Douglas Crockford: Các Bộ phận Tốt, bạn nên luôn tránh '=='. Tuy nhiên, tôi tự hỏi suy nghĩ ban đầu về thiết kế hai tập hợp các nhà khai thác bình đẳng là gì.Khi nào JavaScript == có ý nghĩa hơn ===?

Bạn có thấy bất kỳ tình huống nào sử dụng '==' thực sự phù hợp hơn sử dụng '===' không?

Trả lời

17

Hãy xem xét một tình huống khi bạn so sánh số hoặc chuỗi:

if (4 === 4) 
{ 
    // true 
} 

nhưng

if (4 == "4") 
{ 
    // true 
} 

một nd

if (4 === "4") 
{ 
    // false 
} 

Điều này áp dụng cho các đối tượng cũng như mảng.

Vì vậy, trong trường hợp trên, bạn phải thực hiện sự lựa chọn hợp lý cho dù sử dụng == hoặc ===

+0

Tôi không yêu cầu sự khác biệt giữa hai, được trả lời trong 359494. Tôi quan tâm để biết khi nào '==' sẽ đặc biệt phù hợp. – bryantsai

+5

@bryantsai: Anh ấy đã cho bạn điều đó - so sánh các chuỗi với các số không sử dụng 'parseInt' theo cách thủ công. – Anonymous

+0

mm .. không thực sự phát hiện ra điều đó, cảm ơn. – bryantsai

0

== so sánh xem giá trị của 2 bên có giống nhau hay không.

=== so sánh xem giá trị và kiểu dữ liệu của 2 bên có giống nhau hay không.

Giả sử chúng ta có

$var = 0; 

if($var == false){ 
    // true because 0 is also read as false 
} 

if(!$var){ 
    // true because 0 is also read as false 
} 

if($var === false){ 
    // false because 0 is not the same datatype as false. (int vs bool) 
} 

if($var !== false){ 
    // true becuase 0 is not the same datatype as false. (int vs bool) 
} 

if($var === 0){ 
    // true, the value and datatype are the same. 
} 

bạn có thể kiểm tra http://www.jonlee.ca/the-triple-equals-in-php/

+3

-1 Đó là về JavaScript chứ không phải PHP. – Gumbo

3

tôi sẽ đề nghị rằng không có vấn đề với việc sử dụng ==, nhưng để hiểu khi nào và tại sao để sử dụng nó (tức là sử dụng === làm quy tắc và == khi phục vụ mục đích). Về cơ bản, == chỉ mang đến cho bạn ký hiệu viết tắt - (! Vble) thay vì làm một cái gì đó giống như

if (vble === 0 || vble === "" || vble === null || vble === undefined || vble === false) ... 

Nó dễ dàng hơn để chỉ cần viết

if (vble == false) ... 

(Hoặc thậm chí dễ dàng hơn để viết)

nếu ...

Tất nhiên, có nhiều ví dụ hơn là chỉ tìm kiếm giá trị "trung thực" hoặc "falsey".

Thực sự, bạn chỉ cần phải hiểu khi nào và tại sao sử dụng =====, tôi không thấy bất kỳ lý do tại sao không sử dụng == nơi nó phù hợp hơn ...

Một ví dụ khác là sử dụng viết tắt này để cho phép phương pháp tốc ký gọi:

function func(boolOptionNotCommonlyUsed) { 
    if (boolOptionNotCommonlyUsed) { //equiv to boolOptionNotCommonlyUsed == true 
    //do something we rarely do 
    } 
    //do whatever func usually does 
} 

func(); //we rarely use boolOptionNotCommonlyUsed, so allow calling without "false" as an arg 
5

Câu trả lời đơn giản là '==' có ý nghĩa hơn '===' khi bạn muốn loại cưỡng chế để xảy ra trong quá trình so sánh.

Ví dụ điển hình là các số được chuyển trong chuỗi truy vấn URL. Ví dụ: nếu bạn có nội dung được phân trang và thông số truy vấn page giữ số trang hiện tại thì bạn có thể kiểm tra trang hiện tại với if (page == 1) ... mặc dù page thực sự là "1", không phải 1.

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