在2个不同的示例中,相同的布尔计算给出2个不同的结果。为什么?

时间:2019-02-27 10:22:17

标签: javascript html

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

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

第一个示例:

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

第二个示例:

console.log("a" in window);

2 个答案:

答案 0 :(得分:1)

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

因此您可以观察到,两个语句都返回boolean,但是在您的if条件下,您正在为变量a赋值1,因此返回相同的值,而后一个则直接返回布尔值

  

简而言之,在第一种情况下 将打印变量值 ,而在第二种情况下 则将打印结果条件


如果您不希望将它们悬挂在ES5中,则可以有效地使用 IIFE s 来限制范围,如下所示-

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

答案 1 :(得分:0)

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

Refer

return false