我找到了一些关于使用 angular 进行身份验证的代码,但我无法理解这个技巧:
authService.isAuthenticated = function () {
return !!Session.userId;
};
!!
"用户 ID 的不同"是什么意思?
每当true = !!true = !!!!true =>etc
,它都不明白这一点。
有人可以帮助我吗?
(https://medium.com/opinionated-angularjs/techniques-for-authentication-in-angularjs-applications-7bbf0346acec 为源,部分"身份验证服务")
> !!
将任何值转换为boolean
值
> !!null
false
> !!true
true
> !!{}
true
> !!false
false
如果值falsey
则结果将false
。如果是truthy
则结果将true
。
更重要的是,第三个!
反转转换后的值,因此上面的示例变为:
> !!!null
true
> !!!true
false
> !!!{}
false
> !!!false
true
它强制返回的内容是boolean
,而不是整数或空值。例如,0
计算结果为false
==
,但不会===
。因此,为了确保返回的任何整数0
都将转换为布尔值,我们使用 !!
.如果返回null
或undefined
,这也有效。
所以发生的事情实际上是:
var test = null;
var result = !test; // returns true
result = !return; // returns false
!! 用于将右侧的值转换为其等效的布尔值。
!!false === false
!!true === true
强制 oObject 到布尔值。如果是假的(例如0,null
,undefined
等),它将false
,否则true
。
!oObject //Inverted boolean
!!oObject //Non inverted boolean so true boolean representation
所以!! 不是运算符,它只是 ! 运算符两次。
引用自 : https://stackoverflow.com/a/784946/2218635