Dev*_*lli 35 google-chrome node.js google-chrome-devtools
我正在使用Node Monkey来调试我的NodeJS应用程序.
当我在Chrome控制台中点击"存储为全局变量"时,它经常会出现"无法保存到临时变量"的情况.
console.log({why:'dont', you:'work?'})
Run Code Online (Sandbox Code Playgroud)
它也发生在这个jsfiddle中
1)我做错了吗?
2)为什么会这样?
Chrome:50.0.2661.102(64位)OSX El Capitan 10.11.4
Mat*_*ert 77
我可以看到Store As Global Variable无法工作的两个原因:
1.选择了错误的控制台上下文
这可以说是Chrome错误,但如果控制台设置为与记录对象的代码相同的上下文,则只能将对象存储为全局.
实际上,这意味着您可能需要选择正确的IFrame或Web worker.
例如,在jsFiddle上:
在正常的jsFiddle编辑器页面上下文中,我收到一个错误.但是如果我将上下文改为小提琴本身的内容,它就有效:
2.垃圾收集
为了让Chrome为您提供对象的引用,对象仍然必须在内存中.如果不是这种情况,它只会抛出错误.
但是,我很确定在控制台中显示强制V8保持对值的引用.
您需要在控制台本身中创建对象,因为Chrome需要维护对象的引用.只需将以下内容放入控制台:
{why:'dont', you:'work?'}
Run Code Online (Sandbox Code Playgroud)
添加从打印的ObjectPropertySections(控制台,范围窗格等)访问对象的功能.
根据我的理解,问题console.log是输出对象的字符串表示,并且只是使用对象格式化器来很好地显示它.该对象不再存在.当您通过控制台本身创建对象时,Chrome会将对象本身存储在内存中.如果您在断点处暂停并具有本地范围的变量,则这些变量也可以全局存储,因为它们也在内存中.
如果你没有循环引用,你可以在代码中做的一件事是:
console.log(JSON.stringify({why:'dont', you:'work?'}));
> {"why":"dont","you":"work?"}
Run Code Online (Sandbox Code Playgroud)
在控制台中,复制输出并将其粘贴到JSON.parse呼叫中:
JSON.parse('{"why":"dont","you":"work?"}');
> Object {why: "dont", you: "work?"}
Run Code Online (Sandbox Code Playgroud)
该变量现在存在于内存中,因此您可以存储它.
| 归档时间: |
|
| 查看次数: |
8110 次 |
| 最近记录: |