Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
奇怪的Javascript代码显示错误的数字_Javascript_Node.js_Variables_Browser_Numbers - Fatal编程技术网

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

奇怪的Javascript代码显示错误的数字,javascript,node.js,variables,browser,numbers,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 据我所知,我们定义了两个变量foo和bar,它们的值分别为5和7。之后,我们将值从bar复制到foo。在第四行,bar不会递增,因为+!(7 - 5) == +!2==+false==0

我在互联网上找到了这段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
呢?

我已经弄明白了。在您的代码中,这一行是诀窍:

fo=bar


o不是实际的o字符。换掉它,你就会看到。

我已经找到了。在您的代码中,这一行是诀窍:

fo=bar


o不是实际的o字符。替换它,您将看到。

föo=bar
实际将
bar
的值分配给新创建的全局变量
f of 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    // ";"
** ]
*/

线
föo=bar
实际将
bar
的值分配给新创建的全局变量
f of 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    // ";"
** ]
*/