我在互联网上找到了这个Javascript代码,但我无法弄清楚为什么它会显示一个意外的数字:
var foo = 5;
var bar = 7;
fоo = bar;
bar += +!(foo - 5);
console.log(foo = bar); // It displays 8 instead of 7
据我了解,我们定义了两个变量foo
和bar
,它们分别具有值5
和7
。之后,我们会将值从bar
复制到foo
。在第四行,bar
不会递增,因为+!(7 - 5) == +!2 == +false == 0
。在最后一行,bar
的值再次复制到foo
,然后显示,这意味着foo
必须是7
。但是,为什么控制台会改为记录8
?
答案 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字符。替换它,你会看到。