的意思 !! JavaScript的

时间:2015-04-20 09:14:29

标签: javascript angularjs

我找到了一些关于使用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')

4 个答案:

答案 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。如果返回undefinedvar test = null; var result = !test; // returns true result = !return; // returns false ,这也有效。

所以最近发生的事情是:

{{1}}

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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

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

所以!!不是运营商,它只是!操作员两次。

参考:https://stackoverflow.com/a/784946/2218635