“ !! window.google”是什么意思?

时间:2019-05-24 17:58:42

标签: javascript vue.js

enter image description here

我正在阅读https://markus.oberlehner.net/blog/using-the-google-maps-api-with-vue/。在屏幕截图的部分中,作者使用:

let initialized = !!window.google;

这是什么意思?

3 个答案:

答案 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设置为falsegoogle