我正在试图理解为什么下面的代码会像它那样运行。具体而言,为什么第一个console.log(...)
表达式会输出someObject
的完整和最终版本?我意识到这和吊装有关(也许?)或者其他一些我没有完全理解的概念。只是在网上搜索这个是很有挑战性的,因为我没有合适的词库来搜索我想知道的东西。
var someObject = {};
// OUTPUT:
console.log(someObject); // {prop: {key: "differentValue"}} <-- WHY!?
console.log(someObject.prop); // undefined
someObject.prop = {key:"value"};
console.log(someObject); // {prop: {key: "differentValue"}} <-- WHY!?
console.log(someObject.prop); // {key: "value"}
someObject.prop = {key:"differentValue"};
console.log(someObject); // {prop: {key: "differentValue"}}
console.log(someObject.prop); // {key: "differentValue"}
我在为自己编写代码时发现了这一点,其中我希望通过for-loop看到对象在每次迭代时的状态。我很惊讶地看到输出到控制台的对象在每一个回合都是一样的;该状态是整个循环执行后对象的结束状态。
更让我困惑的是,我真正想要理解的部分是,为什么对对象属性的读取似乎确实像一个人(或至少是我)所期望的那样工作,而同时,整个对象本身似乎具有不同的值。
我想也许这个问题或这个问题可以解释,但我认为它们并不是很相关。
来自MDNconsole.log
文档:
https://developer.mozilla.org/en-us/docs/web/api/console/log#参数
请注意,如果您在最新版本的Chrome和Firefox中记录对象,那么您在控制台中记录的是对对象的引用,它不一定是对象在您调用console.log()时的“值”,但它是对象在您单击打开时的值。
当您记录该属性时,您会看到该属性当时的值。当您记录对象本身时,您将看到所述对象的最新版本。
如果您希望在当时记录对象,请使用console.log(json.parse(json.stringify(obj))
。
问题内容: 考虑这个JavaScript: 在Firefox的Firebug中,这显示了我的期望: 但是,在Safari和Chrome的控制台中,它显示: 换句话说,当打印转储时,对象在控制台中显示错误的属性,但是如果打印了特定的属性,则显示正确的值。 这是浏览器的怪癖吗?还是我所缺少的面向对象javascript的基本方面? 问题答案: 在Chrome浏览器(WebKit,也是Safari)中,
可能重复: 对象文字声明中的自引用 有没有办法在同一对象文本中访问属性名的值?类似这样的事情:
问题内容: 我尝试过一些关于绑定和未绑定方法的代码。当我们调用它们时,我认为它们都会返回对象。但是,当我用于获取一些信息时,它返回的内容我并不理解。 IDE:Eclipse 插件:pydev 输出是… 为什么#1和#2返回相同的ID?他们不是不同的对象吗?如果我们分配和两个变量,#3,#4回报不同的ID。 我认为#3和#4表明它们不是同一对象,而是#1和#2 … 绑定方法的ID和未绑定方法的ID有
如何让不同的分类展示不同的数据 我想让id为1的 显示在全部栏目下 id为2显示吃吃喝喝栏目下 因该怎么改
我有一个具有20个属性的对象。 其中有些属性设置为值,有些未定义。当I!如何将未显示键值的设置为?
我试图做的是从我的两个数组中获得一个随机值,我已经成功地做到了。我的问题是,当从我的Card类创建对象的实例时,我没有收到正确的输出。我希望我的输出类似于“红桃2”或“黑桃杰克”。相反,我没有输出,但代码运行成功。 代码如下: 以及具有Card对象实例的类: