我找到了一些关于使用angular进行身份验证的代码,我无法理解这个技巧:
authService.isAuthenticated = function () {
return !!Session.userId;
};
!!
对于userId'的不同意味着什么? ?
只要true = !!true = !!!!true =>etc
,它就不会理解这一点。
有人可以帮助我吗?
(https://medium.com/opinionated-angularjs/techniques-for-authentication-in-angularjs-applications-7bbf0346acec代表来源,部分' AuthService')
答案 0 :(得分:11)
!!
将任何值转换为boolean
值
> !!null
false
> !!true
true
> !!{}
true
> !!false
false
如果值为falsey
,则结果为false
。如果是truthy
,则结果为true
。
更重要的是,第三个!
反转了转换后的值,因此上面的示例变为:
> !!!null
true
> !!!true
false
> !!!{}
false
> !!!false
true
答案 1 :(得分:2)
它强制返回的是boolean
而不是整数或空值。例如,0
使用false
评估为==
,但===
不评估。0
。因此,为了确保返回的任何整数!!
都将转换为布尔值,我们使用null
。如果返回undefined
或var test = null;
var result = !test; // returns true
result = !return; // returns false
,这也有效。
所以最近发生的事情是:
{{1}}
答案 2 :(得分:1)
!!用于将其右侧的值转换为其等效的布尔值。
!!false === false
!!true === true
答案 3 :(得分:0)
将oObject强制转换为布尔值。如果它是假的(例如0,null
,undefined
等),则为false
,否则为true
。
!oObject //Inverted boolean
!!oObject //Non inverted boolean so true boolean representation
所以!!不是运营商,它只是!操作员两次。