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将抛出该错误。成员访问权限的逻辑值高于非。