2015-04-20 45 views
7

tôi thấy một số mã về xác thực với góc và tôi không thể hiểu được thủ thuật này:Ý nghĩa của !! javascript

authService.isAuthenticated = function() { 
    return !!Session.userId; 
}; 

!! bình 'khác nhau của userId'?

bất cứ khi nào true = !!true = !!!!true =>etc, nó không hiểu điều này.

Ai đó có thể giúp tôi?

(https://medium.com/opinionated-angularjs/techniques-for-authentication-in-angularjs-applications-7bbf0346acec cho nguồn, phần 'Các AuthService')

Trả lời

11

!! Chuyển đổi bất kỳ giá trị cho một giá trị boolean

> !!null 
false 

> !!true 
true 

> !!{} 
true 

> !!false 
false 

Nếu một giá trị là falsey sau đó kết quả sẽ là false. Nếu kết quả là truthy, kết quả sẽ là true.

Thậm chí nhiều hơn, thứ ba ! đảo ngược giá trị chuyển đổi nên các ví dụ trên trở thành:

> !!!null 
    true 

    > !!!true 
    false 

    > !!!{} 
    false 

    > !!!false 
    true 
+0

Bạn sẽ không bao giờ cần ba ' '!. Chỉ một hoặc hai :) –

+0

Vâng, nhưng OP đã yêu cầu, vì vậy tôi chỉ cần đi để làm rõ khái niệm đằng sau này :) –

+0

yeah, nhưng nó xuất hiện khó hiểu. Khái niệm ở đây là '!' Thứ hai phủ nhận sự phủ định đầu tiên, do đó khôi phục giá trị về trạng thái ban đầu của sự thật, nhưng bây giờ là boolean thực (được thực thi bởi '!' Đầu tiên) –

0

coerces oObject để boolean. Nếu nó là falsey (ví dụ: 0, null, undefined, v.v.), nó sẽ là false, nếu không, true.

!oObject //Inverted boolean 
!!oObject //Non inverted boolean so true boolean representation 

Vì vậy !! không phải là một nhà điều hành, nó chỉ là! điều hành hai lần.

Được giới thiệu từ: https://stackoverflow.com/a/784946/2218635

1

!! được sử dụng để chuyển đổi giá trị ở bên phải giá trị sang giá trị boolean tương đương của nó.

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

Nó buộc trở lại là boolean và không phải là số nguyên hoặc giá trị trống. Ví dụ: 0 sẽ đánh giá là false với == nhưng sẽ không có ===. Vì vậy, để chắc chắn rằng bất kỳ số nguyên nào 0 trả lại sẽ được chuyển đổi thành boolean, chúng tôi sử dụng !!. Điều này cũng hoạt động nếu null hoặc undefined được trả lại.

Vì vậy, whats xảy ra thực sự là:

var test = null; 
var result = !test; // returns true 
    result = !return; // returns false