奇怪的Javascript代码显示错误的数字

1 javascript browser variables numbers node.js

我在互联网上找到了这个Javascript代码,但我无法弄清楚为什么它会显示一个意外的数字:

var foo = 5;
var bar = 7;
f?o = bar;
bar += +!(foo - 5);
console.log(foo = bar); // It displays 8 instead of 7
Run Code Online (Sandbox Code Playgroud)

据我了解,我们定义了两个变量foo,并bar具有值57分别.之后,我们将值复制barfoo.在第四行,bar不会增加,因为+!(7 - 5) == +!2 == +false == 0.在最后一行,值from bar再次复制到foo然后显示,这意味着foo必须是7.但是,为什么控制台记录8呢?

Seb*_*mon 5

该行f?o = bar;实际上为bar新创建的全局变量赋值f?o - 即拉丁文小写字母F,西里尔字母小写字母O和拉丁文小写字母O.

如果要替换f?o = bar;foo = bar;(实际上是复制粘贴),符合市场预期它会工作.

您可以通过在控制台中试验代码并最终在控制台中键入以下内容来自行调试:

"f?o = bar;".split("").map(function(a){
  return a.charCodeAt(0);
});
/*
** Returns:
** [
**   102,  // "f"
**   1086, // "o"? This seems suspicious!
**   111,  // "o"
**   32,   // " "
**   61,   // "="
**   32,   // " "
**   98,   // "b"
**   97,   // "a"
**   114,  // "r"
**   59    // ";"
** ]
*/
Run Code Online (Sandbox Code Playgroud)