2012-02-10 3 views
7

thể trùng lặp:
What is the !! (not not) operator in JavaScript?Tại sao hai !! trong câu lệnh IF khi sử dụng &&?

Tôi đang tìm thông qua một số mã và xem một tuyên bố NẾU trông giống như hình dưới đây. Bất cứ ai có thể cho tôi biết tại sao có hai !! s thay vì một? Tôi chưa bao giờ thấy điều này trước đây và không thể khai thác bất cứ thứ gì trên Google bởi vì nó bỏ qua nhân vật đặc biệt.

if (!!myDiv && myDiv.className == 'visible') { 
} 

Trả lời

4

Toán tử kép không được sử dụng để truyền biến thành loại boolean. Các dobule nots hủy bỏ lẫn nhau, nhưng nhìn thấy như ! trả về true hoặc false, bạn chỉ nhận được một trong hai đầu ra.

Ví dụ,

!!0 == true 

Vì vậy

!!myDiv == true 

phôi myDiv để một boolean và kiểm tra nó chống lại sự thật. !!myDiv sẽ chỉ cung cấp cho true hoặc false.

+0

Thật tuyệt vời. Đào lên liên kết này dựa trên câu trả lời của Jam. http://www.bennadel.com/blog/1784-Using-Double-Not-Operator-For-Boolean-Type-Casting.htm – mrtsherman

+2

Tại sao điều này thậm chí còn cần thiết trong ví dụ được đưa ra trong câu hỏi?Vị từ của điều kiện 'if' đã được hiểu là boolean. Ngoài ra, '!! 0! == true', vì' 0' là sai. –

0

Đường đôi (!!) chuyển giá trị thành giá trị boolean thực. Các bang đầu tiên "không" giá trị tiềm năng trung thực/falsy cho một boolean thích hợp và thứ hai "không" nó trở lại những gì giá trị nên được như là một boolean thích hợp.

0

!! sẽ ép bất kỳ đối tượng nào vào Boolean. Nó sẽ đánh giá đúng cho các giá trị không phải là giả. Nhưng nó không phải ma thuật, nó chỉ là một đôi không.

  !!false === false 
      !!true === true 

       !!0 === false 
!!parseInt("foo") === false // NaN is falsy 
       !!1 === true 
      !!-1 === true // -1 is truthy 

      !!"" === false // empty string is falsy 
      !!"foo" === true // non-empty string is truthy 
     !!"false" === true // ...even if it contains a falsy value 

    !!window.foo === false // undefined is falsy 
      !!null === false // null is falsy 

      !!{} === true // an (empty) object is truthy 
      !![] === true // an (empty) array is truthy; PHP 
0
  • & là một comparion Bitwise (kết quả là một giá trị> = 0).
  • && là một so sánh lôgic (kết quả là đúng hoặc sai).
  • = là bài tập (luôn luôn đánh giá là đúng).
  • == là so sánh lôgic (dẫn đến đúng hoặc sai).
+0

Bạn chưa trả lời câu hỏi ... – Bojangles

+0

Vâng, ngớ ngẩn tôi, tôi nhận ra rằng ngay sau khi tôi nhấn "Đăng": P – twilson

0

!! myDiv có nghĩa là gấp đôi toán tử! (bằng không).

myDiv có vẻ là một lớp học, kết quả myDiv trong một boolean (sai hoặc đúng) và một lần nữa! sẽ đảo ngược boolean này một lần nữa (không tạo ra cá thể lớp (con trỏ)).

Bạn cũng có thể viết (myDiv! = Null).

Cá nhân tôi thích myDiv! = Null nhưng !! myDiv ngắn hơn.

0

Đó là toán tử bang đôi - nó chuyển myDiv thành giá trị boolean.