Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 以编程方式将变量和对象名称输出为文本字符串_Javascript - Fatal编程技术网

Javascript 以编程方式将变量和对象名称输出为文本字符串

Javascript 以编程方式将变量和对象名称输出为文本字符串,javascript,Javascript,我真的很想跟踪变量,而不必在Firebug控制台窗口之间切换或点击太多,因此我想绘制一个变量名及其对应值的运行时查看器,该查看器将显示在我正在构建的应用程序页面上 我想要两个函数,show(variableName)和freeze(variableName)。它们将以文本字符串的形式输出变量的值和变量或对象的名称,文本字符串将用作查看器中的文本标签。冻结(variableName)与显示(variableName)相同,只是有一个用于跟踪循环的setTimeOut计时器 我确信我缺少了一些基本的

我真的很想跟踪变量,而不必在Firebug控制台窗口之间切换或点击太多,因此我想绘制一个变量名及其对应值的运行时查看器,该查看器将显示在我正在构建的应用程序页面上

我想要两个函数,show(variableName)和freeze(variableName)。它们将以文本字符串的形式输出变量的值和变量或对象的名称,文本字符串将用作查看器中的文本标签。冻结(variableName)与显示(variableName)相同,只是有一个用于跟踪循环的setTimeOut计时器

我确信我缺少了一些基本的东西,但我还没有找到一种方法以编程方式获取包含值名称的字符串,以便将其用作标签。我想我可以在运行前创建带有硬编码标签的表,并在运行时用值填充它,但我确实希望动态生成表,以便它只包含我特别想要显示或冻结的变量。简单功能:

foo1=“岩石”; 表演(1)

foo2=“纸张”; 表演(2)

foo3=“剪刀”; 表演(3)

应通过getElementById('viewer-table')输出此信息:

\foo1rockfoo2paperfoo3cisors

我尝试过这个解决方案:

和eval()但这对我不起作用……我不知道,这不容易吗?感到沮丧

谢谢,
motorhobo

我不确定您是否能够真正获得传递到函数中的变量的“名称”,原因有两个:

1) 变量只是一个标识符。事实上,可以有多个标识符引用完全相同的对象。您(通常)传递的是该引用,而不是任何实际对象

2) show/freeze函数将通过函数声明中的命名参数或通过arguments数组引用它们来践踏标识符名称

我在想是否有什么聪明的方法可以在Firefox中的异常上使用arguments.callee或stack属性。。。但我看不到任何东西能像你所希望的那样揭露这些论点

我建议只需将变量的名称及其值添加到一个简单对象中,并调用各种jsDump方法之一(我更喜欢中的方法):


由于两个原因,我不确定您是否能够真正获得传递到函数中的变量的“名称”:

1) 变量只是一个标识符。事实上,可以有多个标识符引用完全相同的对象。您(通常)传递的是该引用,而不是任何实际对象

2) show/freeze函数将通过函数声明中的命名参数或通过arguments数组引用它们来践踏标识符名称

我在想是否有什么聪明的方法可以在Firefox中的异常上使用arguments.callee或stack属性。。。但我看不到任何东西能像你所希望的那样揭露这些论点

我建议只需将变量的名称及其值添加到一个简单对象中,并调用各种jsDump方法之一(我更喜欢中的方法):


没有简单的方法可以解决这个问题,因为被调用函数根本不知道变量的原始名称。你甚至不能用反射来解决这个问题(特别是在javascript中),所以你也必须将变量的名称传递给函数。要查看您发布的链接,请执行以下操作:

function show(varObject)
{
    for(name in varObject)
    {
        alert(name + ": " + varObject[name]);
        // save both name and reference to the variable to a local "to observe array"
    }
}
并称之为

var test = "xxx";
show({'test' : test});

在for循环中,您可以将easy变量添加到监视器数组中,并在固定时间间隔内更新gui(当单个变量改变其值时,您无法得到通知。您需要某种您正试图创建的全局监视器/观察者)

没有简单的方法来解决这个问题,因为被调用函数根本不知道变量的原始名称。你甚至不能用反射来解决这个问题(特别是在javascript中),所以你也必须将变量的名称传递给函数。要查看您发布的链接,请执行以下操作:

function show(varObject)
{
    for(name in varObject)
    {
        alert(name + ": " + varObject[name]);
        // save both name and reference to the variable to a local "to observe array"
    }
}
并称之为

var test = "xxx";
show({'test' : test});

在for循环中,您可以将easy变量添加到监视器数组中,并在固定时间间隔内更新gui(当单个变量改变其值时,您无法得到通知。您需要某种您正试图创建的全局监视器/观察者)

我明白,谢谢。我试图保存输入相同文本两次的按键,因为标签文本需要与变量名匹配。但如果做不到,我就放手。我已经做得够多了,我明白了,谢谢。我试图保存输入相同文本两次的按键,因为标签文本需要与变量名匹配。但如果做不到,我就放手。我已经做得够多了,谢谢,我很感激你的建议。看起来不管我怎么摇,我都会输入两次这个变量名。不过,这些击键确实有意义……谢谢,我很感谢你的建议。看起来不管我怎么摇,我都会输入两次这个变量名。不过,这些按键肯定会累加起来。。。