Meaning of !! javascript



我找到了一些关于使用 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都将转换为布尔值,我们使用 !! .如果返回nullundefined,这也有效。

所以发生的事情实际上是:

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

!! 用于将右侧的值转换为其等效的布尔值。

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

强制 oObject 到布尔值。如果是假的(例如0,nullundefined等),它将false,否则true

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

所以!! 不是运算符,它只是 ! 运算符两次。

引用自 : https://stackoverflow.com/a/784946/2218635

最新更新