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

时间:2016-08-04 22:51:07

标签: javascript node.js variables browser numbers

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

var foo = 5;
var bar = 7;
fоo = bar;
bar += +!(foo - 5);
console.log(foo = bar); // It displays 8 instead of 7

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

2 个答案:

答案 0 :(得分:5)

fоo = bar;实际上将bar的值分配给新创建的全局变量fоo - 这是拉丁文小写F Cyrillic 小写字母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    // ";"
** ]
*/

答案 1 :(得分:0)

我已经弄清楚了。在你的代码中,这一行是诀窍:

f ® o = bar;

o不是真正的o字符。替换它,你会看到。