奇怪的Javascript代码显示错误的数字
我在互联网上find了这个Javascript代码,但我不明白为什么它显示一个意外的数字:
var foo = 5; var bar = 7; fоo = bar; bar += +!(foo - 5); console.log(foo = bar); // It displays 8 instead of 7
据我所知,我们定义了两个variablesfoo
和bar
,它们的值分别为5
和7
。 之后,我们从bar
复制值到foo
。 在第四行, bar
不会递增,因为+!(7 - 5) == +!2 == +false == 0
。 在最后一行, bar
值再次被复制到foo
然后显示,这意味着foo
必须是7
。 但是,为什么控制台日志8
呢?
该线fоo = bar;
实际上将bar
的值分配给一个新创build的全局variablesfоo
这是拉丁文小写字母F
, 西里尔文小写字母O
和拉丁文小写字母O
如果你更换fоo = bar;
由foo = bar;
(实际上是复制粘贴它),它会按预期工作。
您可以通过在控制台中试验代码并最终在控制台中input以下内容来自己debugging:
"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 // ";" ** ] */
我已经知道了。 在你的代码中,这一行是绝招:
оo =酒吧;
o不是一个真正的字符。 replace它,你会看到。