关于javascript:相同的布尔计算在2个不同的示例中给出2个不同的结果。

Same boolean calculation giving 2 different results in 2 different examples. Why?

本问题已经有最佳答案,请猛点这里访问。

有人解释为什么在布尔(CAN "a" in window)这个真实的例子,在第一和第二部分的假?

我真的没有线索这是什么和如何获得这是in布尔计算?

第一部分:

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

第二部分:

1
console.log("a" in window);


正如@certainperformance所提到的,您的EDOCX1[4]被提升到顶部,在全球范围内都可以访问,这在javascript中是正常的行为。仅供参考,他们为ES6中的块范围引入了一个let关键字。

因此,您可以观察到,这两个语句都返回booleans,但是在if条件下,您要为变量a赋值1,因此它返回相同的&;后一个直接返回布尔值。

In short, in the first condition, you are printing a variable value, whereas in second one, you are printing the result of a condition.

如果您不希望在ES5中提升它们,可以有效地使用IIFES来限制范围,如下所示-

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

同样,在ES6中-

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


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

参考

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