在Firebug中,DOM选项卡显示所有公共变量和对象的列表.在Chrome的控制台中,您必须键入要浏览的公共变量或对象的名称.
有没有办法 - 或者至少是命令 - Chrome的控制台显示所有公共变量和对象的列表?它会节省很多打字.
说我有一个变量 str
var str = "123"
Run Code Online (Sandbox Code Playgroud)
现在我可以做console.log(`Hello ${str}`),它会打印出来Hello 123
现在我有另一个变量 strnew
var strnew = 'Hello ${str}'
Run Code Online (Sandbox Code Playgroud)
注意(基于答案/评论) - strnew从文件中读取,因此它总是一个字符串,不能替换为`
我该如何console.log(...)打印Hello 123
有可能没有任何一种 eval()
我有一个简单的javascript错误记录机制,它看起来像这样:
window.onerror = function (ErrorMsg, Url, LineNumber, Col, Error) {
// ajax these to the server, including Error.stack}
Run Code Online (Sandbox Code Playgroud)
问题是我还想在发生错误时获取局部变量和函数参数的值.这甚至可能吗?
我正在考虑修改Function原型,以便每次运行一个函数时,它的参数都存储在一个全局字符串数组中,然后错误处理程序只会将这个数组添加到ajax调用中.javascript可以这样做吗?
谢谢.
例如,如果我们假设以下代码:
var f = function() { return 'hello world' };
var x = 10;
var y = 314;
var g = function() {
var buf = [], xx = x;
while (xx--)
buf.append(f() + ' ');
return buf.join('');
}
Run Code Online (Sandbox Code Playgroud)
我能得到实际的"代码"为一串g用g.toString().然而,这并没有(显然)得到f和x关闭的成员g(对不起,如果我没有正确使用这些术语.)
有没有办法查询函数的闭包含什么?理想情况下,我可以得到一个对象:
{ 'f' : f, 'x': x } // note that `y` is not here
Run Code Online (Sandbox Code Playgroud)
如果我必须使用C++进行与V8的特殊交互,那没关系 - 尽管在纯JavaScript中以某种方式这样做是最好的.
我知道这是一个奇怪的问题 - 但我确实有理由想要这个!
在JavaScript调试器中,我可以手动检查函数的作用域链.例如,在执行foo()这段代码时:
var x1 = "global";
var foo = (function main () {
var x2 = "inside obj";
return function internalFoo () {
var x3 = "inside internalFoo";
console.log (x1+','+x2+','+x3); // get the scopes
};
})();
foo ();
Run Code Online (Sandbox Code Playgroud)
并在上面设置断点console.log,我看到以下范围:

有没有办法以编程方式执行此操作?
如何检查每个范围级别的定义?
全局var的工作示例:
var example_var = 'global var example';
var x = function(){
var var_name = 'example_var';
alert('Global var value is: ' + window[var_name]);
}
我如何用局部变量做同样的事情?像这样(不是工作示例):
var x = function(){
var example_var = 'Local var example';
var var_name = 'example_var';
alert('Local var value is: ' + window[var_name]);
}
我希望能够获取当前范围内所有变量的列表。我知道这可能是不可能的(例如1、2、3 ),但这对于简化我当前正在开发的节点/浏览器库的解析算法确实很有帮助。
一件事:它不需要打印,也不需要“缩小”。
我希望能够通过读取 JS 库并动态地eval解析它来找出引入了哪些变量,找到两者之间状态的差异。我知道这种方法在纸面上听起来很糟糕(我很熟悉 eval 的仇恨),但是如果有更好的方法来找到它,而不仅仅是简单地解析整个库(这对于除 C/etc 之外的任何语言来说都很慢) .),我洗耳恭听。
对于你对公然使用 的抱怨eval,我知道使用闭包来保护父作用域不被修改。如果是在浏览器环境中,我还能够防止在 eval 中更改浏览器显示(暂时更改一些 DOM 构造函数)。
之前已经问过其他语言的这个问题:Python,PHP和JavaScript.
我想知道是否可以在C中执行此操作.我试图在执行期间的某个时刻获取我的函数中的所有变量的快照,然后在稍后的时间点将其与另一个快照进行比较.
编辑
快照可以是范围内所有变量及其当前值的列表.我可以手工编写代码,但我想知道是否有更快的方法.
我想做一个可以在调试中使用很多的函数,用它们的值打印所有变量.它会警告:
x = 3
y = 2
该功能将是这样的:例如
:
var text='';
for(var a=0;a<allVariables;a++)
{
text+=nameOfVariable + " = " + valueOfVariable + "/n";
}
alert(text);
Run Code Online (Sandbox Code Playgroud) 我有一些存储在外部文件中的变量(settings.js):
var company = "Apple";
var city = "Toronto";
var weather = "Sunny";
Run Code Online (Sandbox Code Playgroud)
在我的HTML中,我引用了jQuery和settings.js,其中将存储所有变量.body标签之间的代码如下所示:
<div class="company"></div>
<div class="city"></div>
<div class="weather"></div>
Run Code Online (Sandbox Code Playgroud)
我正在尝试制作一些智能jQuery代码,它将通过settings.js文件读取,查找变量并加载它,然后找到与变量具有相同类名的HTML元素,最后使用变量值更新该元素的内容.
执行函数后,HTML应如下所示:
<div class="company">Apple</div>
<div class="city">Toronto</div>
<div class="weather">Sunny</div>
Run Code Online (Sandbox Code Playgroud)
注意: HTML中可能有多个位置具有相同的类名.所有这些都将在FF本地运行.这是测试/演示项目,所以我不太担心性能.
我知道这可能听起来有点荒谬,但我正在寻找一种方法来定义函数中的每个变量作为属性this.我正在寻找任何方法,以任何方式能够有一些方法来跟踪函数内的变量(即将它们添加到this对象),而不必实际为每个变量定义添加前缀this..有办法吗?这有可能Proxy吗?
function () {
// declare a variable
var hello = 'hi'
return this
}
let {hello} = function()
console.log(hello) // hi
Run Code Online (Sandbox Code Playgroud)
例如,这有效:
function hi () { this.hello = true; return this }
hi.bind({})() // { hello: true }
Run Code Online (Sandbox Code Playgroud)
我想要的是一种方法,在定义所有变量时hi将其添加到this对象中.
我怀疑我在基本的JavaScript语法中犯了一个错误.
var my_array = new Array(10);
for (var count=0; count<my_array.length; count++) {
var my_array+count = "This is a variable number "+count+".";
document.write(my_array+count);
}
Run Code Online (Sandbox Code Playgroud)
我希望循环创建一系列变量,应该调用my_array0,my_array1,my_array2等等.上面的代码是我尝试这样做的方式,但它不起作用.在循环中命名变量的正确方法是什么?
编辑:我知道我可以使用my_array [count],但那不是我想要的.我需要的是能够在循环中命名变量,使用索引作为变量名称的一部分.
javascript ×10
scope ×2
c ×1
ecmascript-6 ×1
eval ×1
exception ×1
jquery ×1
node.js ×1
reflection ×1
state ×1
syntax ×1
this ×1
v8 ×1