Javascript 什么是';!!用户';用来做什么?这条线的结果是什么?

Javascript 什么是';!!用户';用来做什么?这条线的结果是什么?,javascript,angular,rxjs,Javascript,Angular,Rxjs,我想在我的应用程序中创建一个有角度的路线卫士。我找到了这段代码,但不明白为什么我们要将用户映射到!!用户。map(user=>!!user)line的目的是什么 canActivate( next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> { return this.auth.user.pipe() take(1),

我想在我的应用程序中创建一个有角度的路线卫士。我找到了这段代码,但不明白为什么我们要将
用户
映射到
!!用户
map(user=>!!user)
line的目的是什么

canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot): Observable<boolean> {

      return this.auth.user.pipe()
           take(1),
           map(user => !!user),
           tap(loggedIn => {
             if (!loggedIn) {
               console.log('access denied')
               this.router.navigate(['/login']);
             }
         })
    )
canActivate(
下一步:ActivatedRouteSnapshot,
状态:RouterStateSnapshot):可观察{
返回此.auth.user.pipe()
以(1)为例,
映射(用户=>!!用户),
点击(loggedIn=>{
如果(!loggedIn){
console.log('访问被拒绝')
this.router.navigate(['/login']);
}
})
)

!!
是将某个内容转换为布尔值的常用方法

通过在
map()
函数中应用两次NOT运算符(
),它将用户映射到一个布尔值,然后将该布尔值用作
loggedIn
,该布尔值在
tap()
函数中使用

用户很可能是一个包含userdata(具有真实值)的对象


我还假设,如果您未登录,用户将是
null
undefined
(具有虚假值)。

实际上,在这种情况下,您也可以使用类似的
映射(布尔值)
以同样的方式工作,但更短