我正在阅读https://markus.oberlehner.net/blog/using-the-google-maps-api-with-vue/。在屏幕截图的部分中,作者使用:
let initialized = !!window.google;
这是什么意思?
答案 0 :(得分:7)
window.google
评估为某物,或者评估为undefined
。
在回答您的问题之前,我们需要了解"truthiness"
的概念在JavaScript中,真实值是在布尔上下文中遇到的真实值。除非将它们定义为虚假(即,除了false,0,“”,null,undefined和NaN
,
好的,回到您的问题。让我们假设它是某种东西(真实值)。 !something
将评估为false。 !false
的评估结果为true,因此!!something
的评估结果为true。
现在假设它是undefined
。在这种情况下,!undefined
的评估结果为true,然后!true
的评估结果为false。因此,!!undefined
的计算结果为false。
换句话说:如果它是某种东西(真实),则将其初始化。如果不是,则说明尚未初始化。
因此,在真实值( something )之前的!
将使其为假,然后多余的!
将其取反。真实的事情变成了事实,虚假的事情变成了错误。
答案 1 :(得分:2)
!是将变量转换为布尔值的简便方法。如果正确加载了Google脚本,则window.google
将以object
的形式存在。 !object
将返回false
(如果它是合法值,则在js中的布尔检查中将其转换为true,对象的值为true
,!true
为{{1} }。第二次不操作会将false
转换回false
,因此对象被转换为布尔值。
以同样的方式,如果加载脚本时出错,则true
将为'undefined',其值为window.google
。使用double不操作,您将false
转换为实际的布尔值undefined
。
答案 2 :(得分:1)
!!expression
是一个简洁的习惯用法,用于将表达式的值转换为布尔值。
在这种情况下,根据是否存在带有真实值的全局initialized
属性,将true
设置为false
或google
。