我理解这段代码.我们制作A的副本并将其称为C.当A被更改时,C保持不变
var A = 1;
var C = A;
console.log(C); // 1
A++;
console.log(C); // 1
Run Code Online (Sandbox Code Playgroud)
但是当A是阵列时,我们会有不同的情况.C不仅会改变,而且会在我们触及A之前发生变化
var A = [2, 1];
var C = A;
console.log(C); // [1, 2]
A.sort();
console.log(C); // [1, 2]
Run Code Online (Sandbox Code Playgroud)
有人可以解释第二个例子中发生的事情吗?
不是Google Chrome console.log() inconsistency with objects and arrays的重复,因为这个问题与对象和数组无关。
这是一个简单的 HTML 页面:
<head>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div></div>
<div></div>
<div></div>
<div></div>
<script>
for (const div of document.querySelectorAll("div")) {
console.log(div);
}
</script>
</body>
Run Code Online (Sandbox Code Playgroud)
有时结果会按预期显示:
有时好像我用console.dir()
而不是console.log()
:
很少,我会混合:
当我尝试创建上面所示的最小的、可重现的示例时,我删除了<link>
,因为它似乎与问题无关。然而,删除它之后,不一致的情况消失了,所以我恢复了它,并尝试最小化 CSS 本身,直到style.css
目前完全为空。因此,不知何故,标签的存在<link>
似乎至少与问题有关。
这种行为是否有原因,或者是一个错误?
我尝试在Chrome Developer Console中执行代码,我得到了这个奇怪的结果,我无法理解
var arr = [[2,2]];console.log('Array is',arr);arr[0] = [3,3]
Run Code Online (Sandbox Code Playgroud)
执行此操作后得到的输出是
Array is [[3,3]]
任务应该在console.log
执行完毕后发生.但它在那之前神奇地发生了.
为了澄清我尝试在JsBin中运行相同的代码.但是在JSBin中,我得到了预期的结果
Array is [[2,2]]
但是,此代码会产生预期的chrome结果
var arr = [2,2];console.log('Array is',arr);arr[0] = 3;console.log(arr)
产量
Array is [2,2] [3,2]
有人可以帮助我理解这一点.
以下应该让你理解:
我将值设置为 1。然后在控制台中输出它。这里的输出显示 1。在我将值设置为 2 之后。相同的控制台输出显示 2。