Javascript的含义是什么?

8

我找到了一些关于使用Angular进行身份验证的代码,但是我不理解其中的技巧:

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

“!!”代表“userId的不同”,这与IT技术有关。

每当出现“true = !!true = !!!!true =>etc”等情况时,我就无法理解。

请问有人能帮助我吗?

(来源:https://medium.com/opinionated-angularjs/techniques-for-authentication-in-angularjs-applications-7bbf0346acec,“The AuthService”部分)

4个回答

11

!! 将任何值转换为 boolean

 > !!null
 false

 > !!true
 true

 > !!{}
 true

 > !!false
 false
如果一个值是“falsey”,那么结果将为“false”。如果它是“truthy”,结果将为“true”。
更进一步,第三个“!”反转了转换后的值,因此以上示例变为:
    > !!!null
    true

    > !!!true
    false

    > !!!{}
    false

    > !!!false
    true

您永远不需要三个 !。只需要一个或两个就可以 :) - Sergio Tulentsev
是的,但是OP在问,所以我只是去澄清这背后的概念 :) - Georgi-it
是的,但它变得令人困惑了。这里的概念是第二个 ! 取消了第一个否定,从而将值恢复为其原始的真实状态,但现在作为真正的布尔值(由第一个 ! 强制执行)。 - Sergio Tulentsev

2

它强制返回值为布尔值而不是整数或空值。例如,0 使用 == 会被计算为 false,但使用 === 不会。因此,为了确保任何整数 0 被转换为布尔值,我们使用 !!。如果返回的是 nullundefined,这也适用。

所以实际上发生的是:

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

1

!!用于将其右侧的值转换为相应的布尔值。

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

0

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

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

所以!!不是一个运算符,它只是两次使用!运算符。

引用自:https://dev59.com/jXRA5IYBdhLWcg3w6SRH#784946


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接