我正在使用Node Monkey来调试我的NodeJS应用程序。
经常会出现这样的情况,当我在Chrome控制台中单击“保存为全局变量”时,它会显示“无法保存到临时变量”。
console.log({why:'dont', you:'work?'})
这也发生在这个jsfiddle上。
1) 我做错了什么吗?
2) 为什么会这样?
Chrome: 50.0.2661.102 (64-bit) OSX El Capitan 10.11.4
我正在使用Node Monkey来调试我的NodeJS应用程序。
经常会出现这样的情况,当我在Chrome控制台中单击“保存为全局变量”时,它会显示“无法保存到临时变量”。
console.log({why:'dont', you:'work?'})
这也发生在这个jsfiddle上。
1) 我做错了什么吗?
2) 为什么会这样?
Chrome: 50.0.2661.102 (64-bit) OSX El Capitan 10.11.4
2. 垃圾回收
为了让Chrome给你一个对象的引用,该对象仍然需要在内存中。如果不是这种情况,它只能抛出错误。
然而,我相信在控制台中显示可以强制V8保持对该值的引用。
{why:'dont', you:'work?'}
如果您查看添加此功能的此版本,它会说:
添加从已打印的对象属性部分(控制台、范围窗格等)访问对象的能力。
据我所知,问题在于console.log
输出了对象的字符串表示形式,只是使用对象格式化程序来美观地显示它。该对象不再存在。当您通过控制台本身创建对象时,Chrome会将对象本身存储在内存中。如果您在断点上暂停并具有局部作用域变量,则这些变量也可以存储在全局变量中,因为它们也在内存中。
如果您的代码没有循环引用,那么可以尝试以下操作:
console.log(JSON.stringify({why:'dont', you:'work?'}));
> {"why":"dont","you":"work?"}
JSON.parse
调用中:JSON.parse('{"why":"dont","you":"work?"}');
> Object {why: "dont", you: "work?"}
按下Ctrl+Shift+C
,选择打印对象框架中的任何元素,然后再试一次。
这样就可以解决问题了。
iframe
)。 - Oleg Pro