Javascript 什么是'!!window.google';什么意思?

Javascript 什么是'!!window.google';什么意思?,javascript,vue.js,Javascript,Vue.js,我正在通读。在屏幕截图的一节中,作者使用了: let initialized = !!window.google; 这是什么意思?!!expression是一种将表达式的值转换为布尔值的简洁习惯用法 在这种情况下,initialized将被设置为true或false,这取决于是否有全局google属性具有真实值。窗口。google要么计算为某物,要么计算为未定义的 在讨论你的问题之前,我们需要先了解一下 在JavaScript中,truthy值是在布尔上下文中遇到时被视为true的值。除非定义

我正在通读。在屏幕截图的一节中,作者使用了:

let initialized = !!window.google;

这是什么意思?

!!expression
是一种将表达式的值转换为布尔值的简洁习惯用法


在这种情况下,
initialized
将被设置为
true
false
,这取决于是否有全局
google
属性具有真实值。

窗口。google
要么计算为某物,要么计算为
未定义的

在讨论你的问题之前,我们需要先了解一下

在JavaScript中,truthy值是在布尔上下文中遇到时被视为true的值。除非定义为falsy(即除false、0、“、null、未定义和NaN外),否则所有值都是真实的

好的,回到你的问题。让我们假设它是某个(真实值)。
!某个
将计算为false。
!false
计算为true,因此
!!某个
将计算为true

现在假设它是
未定义的
。在这种情况下,
!未定义的
计算为true,然后
!true
计算为false。因此,
!!未定义的
将计算为false

换句话说:如果它是某物(truthy),则它已初始化。如果不是,则它尚未初始化。


所以,
在真实值(某物)之前如果将其设为false,那么额外的
将否定它。Truthy things变为true,falsy things变为false。

!!是一种将变量转换为布尔值的速记方法。如果google脚本加载正确,
窗口。google
将作为
对象存在。
对象将返回
false
(如果它是合法值,则在js中的布尔检查中将其转换为true,对象的计算结果为
true
!true
false
)。第二次不操作将
false
转换回
true
,因此对象将转换为布尔值


同样,如果加载脚本时出错,则
窗口。google
将为“未定义”,评估为
false
。使用double not operation,您可以将
未定义的
转换为实际的布尔值
false

。在这种情况下,它不只是检查是否保存了
google
值吗在
窗口上
对象,并使用双精度
!!
将其转换为布尔值。如果(!!某物)
如果(某物)之间有什么区别
@IsaacVidrine通常什么都没有。如果要返回该值或在其他地方使用该值,则只能使用双负数。对于逻辑比较,这是毫无意义的。请注意,在问题中,这是分配给变量的。
!!
表示“我不在乎该值是什么,只要它在逻辑上是真还是假”.@tadman有道理,谢谢!我认为这是将truthy/falsy值“展平”为true或false。@IsaacVidrine将抛出该错误。成员访问权限的逻辑值高于非。