为什么控制台记录,注销已经分配为新分配的变量
Why does console log, log out a variable thats already been assigned as the new assignment
我是 Javascript 的新手,想弄清楚一些事情,我读了一些关于提升的东西,觉得这可能是我问题的原因和答案,但为什么日志,注销最后分配给我的常量?
const people = [
{
name: "Roger",
age: 29,
role: "Secret Agent"
},
{
name: "Jamie",
age: 35,
role: "Secret Agent"
}
]
console.log("people", people);
people[0].name = 'bob';
console.log("people", people);
两个结果都显示 bob,而不是 Roger 然后 Bob。
如果有人能解释为什么会这样,那就太好了。
请看这个问题:console.log() shows the changed value of a variable before the value actually changes。这是 仅 发生在 console.log
的错误。除非您依赖控制台日志记录您尝试创建的内容,否则这应该不是问题。
这是一个实施怪癖。 Chrome (V8) 和 Firefox (SpiderMonkey) 将在您在控制台中展开对象时解析为该对象。在幕后,价值可能已经改变。 WebKit (Safari) 将按原样记录它。如果要捕获对象在某个时间点的原样,请使用 console.log(JSON.parse(JSON.stringify(obj)));
[1] https://developer.mozilla.org/en-US/docs/Web/API/Console/log#Logging_objects
P.S Javascript 充斥着这些怪癖。不是要让你气馁,但应该是的往往不是它的本来面目。这个例子也与 javascript 中的异步编程非常相似,这可能会让那些来自过程背景的人感到不快。为了过于简单化,您的值将在您到达下一行之前在幕后发生变化,因此最好了解事件循环、回调和随后的承诺以及 async/await.
我是 Javascript 的新手,想弄清楚一些事情,我读了一些关于提升的东西,觉得这可能是我问题的原因和答案,但为什么日志,注销最后分配给我的常量?
const people = [
{
name: "Roger",
age: 29,
role: "Secret Agent"
},
{
name: "Jamie",
age: 35,
role: "Secret Agent"
}
]
console.log("people", people);
people[0].name = 'bob';
console.log("people", people);
两个结果都显示 bob,而不是 Roger 然后 Bob。
如果有人能解释为什么会这样,那就太好了。
请看这个问题:console.log() shows the changed value of a variable before the value actually changes。这是 仅 发生在 console.log
的错误。除非您依赖控制台日志记录您尝试创建的内容,否则这应该不是问题。
这是一个实施怪癖。 Chrome (V8) 和 Firefox (SpiderMonkey) 将在您在控制台中展开对象时解析为该对象。在幕后,价值可能已经改变。 WebKit (Safari) 将按原样记录它。如果要捕获对象在某个时间点的原样,请使用 console.log(JSON.parse(JSON.stringify(obj)));
[1] https://developer.mozilla.org/en-US/docs/Web/API/Console/log#Logging_objects
P.S Javascript 充斥着这些怪癖。不是要让你气馁,但应该是的往往不是它的本来面目。这个例子也与 javascript 中的异步编程非常相似,这可能会让那些来自过程背景的人感到不快。为了过于简单化,您的值将在您到达下一行之前在幕后发生变化,因此最好了解事件循环、回调和随后的承诺以及 async/await.