【问题标题】:Javascript in check vs dot notation checkJavascript 检查与点符号检查
【发布时间】:2016-09-06 03:26:42
【问题描述】:

基于this answer 我知道我可以使用 in 运算符检查属性是否存在。所以我在很多代码中看到了它是常用的,例如:

if ("gapi" in window) {
    gapi.login(...);
}

但是这样做不是更好吗?

if (window.gapi) {
    gapi.login(...);
}

我知道的唯一区别是,如果变量存在但其值为 undefinedfalse0null 或其他计算结果为 false 的值,则第二个变量将返回 false;第一个会返回 true,对吧?

那么,还有其他区别吗?我应该使用哪一个?

【问题讨论】:

  • 对于后者,如果window.gapi为0、false、null等呢?
  • @Marty 是的,这就是我在问题前的最后一段中所说的
  • 据我了解,您的最后一段严格提到了undefined
  • @Marty 你是对的,我心中有这些价值观,但没有写下所有这些价值观。我更新了问题。谢谢
  • 您的问题现在很不寻常,因为它的内容类似于“除了这些重要的差异列表之外,这两件事之间有什么区别?”。

标签: javascript variables object


【解决方案1】:

是的,有很大的不同。如果gapi 是假的(0false、空字符串、null)怎么办?这将跳过该块。

【讨论】:

  • 是的,但这取决于我想要什么。因为如果它未定义。我不想执行gapi.login,因为它会失败,对吧?
  • @PabloMatiasGomez undefined 是假的
  • 是的!这就是我要说的,在第一个块中,如果它是未定义的,它将进入块并执行一些将失败的东西,因为login 不是未定义的属性
【解决方案2】:

使用第一个。第二种,如果 window.gapi 恰好为 0、false、''、null、undefined 等,它将返回 false。这意味着即使 window.gapi 存在,您的代码也可能不会认为它存在。

【讨论】:

  • 是的,但这取决于我想要什么。因为如果它未定义。我不想执行gapi.login,因为它会失败,对吧?
猜你喜欢
  • 1970-01-01
  • 2021-03-31
  • 1970-01-01
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-25
  • 2012-11-18
相关资源
最近更新 更多