【问题标题】:Same boolean calculation giving 2 different results in 2 different examples. Why? [duplicate]相同的布尔计算在 2 个不同的示例中给出 2 个不同的结果。为什么? [复制]
【发布时间】:2019-07-21 00:55:29
【问题描述】:

有人可以解释为什么布尔值 ("a" in window) 在第一个示例中抛出 true 而在第二个示例中抛出 false 吗?

我实际上不知道这是什么 in 以及如何计算这个布尔值?

第一个例子:

if ("a" in window) {
  var a = 1;
}
console.log(a);

第二个例子:

console.log("a" in window);

【问题讨论】:

标签: javascript html


【解决方案1】:

正如@CertainPerformance 提到的,您的var 将hoisted 置顶并可以全局访问,这是 JavaScript 中的正常行为。仅供参考,他们在 ES6 中为块作用域引入了 let 关键字。

所以你可以观察到,这两个语句都返回 booleans,但是在你的 if 条件下,你将值 1 分配给变量 a,因此它返回相同的 & 后者直接返回一个布尔值。

简而言之,在第一个条件中,您正在打印一个变量值,而 在第二个条件中,您正在打印一个条件。


如果你不希望它们在 ES5 中被提升,你可以有效地使用 IIFEs 来限制范围如下 -

if (true) {
  (function() {
      var a = 1;
      console.log('in block, a = ' + a);    // returns 1
  })();    // IIFE
}
console.log(a);    // inaccessible here, returns an error

在 ES6 中类似 -

if (true) {
  let a = 1;       // let keyword
  console.log('in block, a = ' + a);    // returns 1
}
console.log(a);    // inaccessible here, returns an error

【讨论】:

    【解决方案2】:

    第一个返回 true,因为声明的变量 (a) 获得了 hoisted 和 if 条件 returns true。如果更改了变量名,您将得到未定义,因为 if 条件现在将 return false

    Refer

    if ("a" in window) { 
    var t = 1;
    }
    console.log(t);

    【讨论】:

      猜你喜欢
      • 2020-08-31
      • 2012-06-22
      • 2022-01-10
      • 2011-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-30
      • 2019-10-02
      相关资源
      最近更新 更多