2012-06-10 16 views
5

Có lợi thế nào, ngoại trừ việc chỉ rõ một chuyển đổi rõ ràng, để sử dụng toán tử double không trong JavaScript? Nó dường như là những ngày này, mọi người muốn kiểm tra sự tồn tại của các API mới bằng cách sử dụng số double không, nhưng tôi chưa bao giờ đọc bất kỳ lợi thế nào cho nó.double not (!!) vs cưỡng chế kiểu trong JavaScript

if(!!window.File) 
    // The File API is supported. 
else 
    // Your browser sucks. 

Một trong những điều mà tôi đã đọc là nó là một cách mơ hồ ngắn gọn để gõ cast để boolean, tuy nhiên, khi được sử dụng trong bối cảnh này, đối tượng sẽ được tự động ép buộc để boolean anyways vì chúng ta đang kiểm tra để xem nếu nó được xác định.

Tóm lại, tại sao mọi người thực hiện hai thao tác boolean trên đỉnh của động cơ?

+0

Như được minh họa bằng liên kết, nó thực hiện chuyển đổi thành một boolean trên toàn cầu. Ở đây nó chủ yếu nhằm mục đích làm cho mã dễ đọc hơn, có nghĩa là chỉ có giá trị boolean là cần thiết. –

+0

Tôi biết chính xác những gì !! giả lập, đó không phải là những gì tôi hỏi. – Vreenak

+2

Không có sử dụng thực sự, đó là một thói quen xấu có khả năng đọc trước. –

Trả lời

7

Tôi không thực sự thấy bất kỳ lý do gì để làm điều đó trong ngữ cảnh như bạn hiện diện. Nó sẽ không ảnh hưởng đến kết quả theo bất kỳ cách nào.

Lần duy nhất tôi thấy điều này là một ý tưởng hay là nếu bạn đang xây dựng một hàm có nghĩa vụ trả lại giá trị bool, và bạn cần truyền nó từ một số giá trị khác, ví dụ:

function isNotFalsy(val) { return !!val; } 

Ví dụ này có thể hơi bị ép buộc nhưng bạn có ý tưởng. Bạn sẽ luôn muốn đảm bảo giá trị trả về là loại người dùng mong đợi.

+0

Được chấp nhận là tốt nhất, muốn chỉ ra @Pointy một số API có thể ===/typeof yêu cầu giá trị boolean. – Vreenak

1

Bạn không cần sử dụng !! bên trong biểu thức if.
Nó đang được sử dụng để chuyển đổi giá trị thành boolean và if thực hiện theo mặc định.

var x = ""; // a falsy value 
!x // true 
!!x // false 

if (x) === if (!!x) 
+0

Cảm ơn bạn đã trả lời, nhưng tôi biết điều này. Câu hỏi đặt ra là nếu có bất kỳ lợi thế nào để sử dụng nó trong một câu lệnh if vì nó là thực hành phổ biến như vậy. – Vreenak

+2

@watkinsj. Tôi tin rằng tôi đã trả lời câu hỏi đó trong dòng đầu tiên ... – gdoron

+0

Bạn nói nó là không cần thiết. Tôi chỉ ra điều này trong câu hỏi. Tôi không thấy bất kỳ câu trả lời nào về bất kỳ ưu điểm hay giải thích nào cho sự gia tăng của nó bên trong câu lệnh if. – Vreenak