Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.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_Python_Parsing_Static Analysis - Fatal编程技术网

回溯JavaScript源代码中的表达式

回溯JavaScript源代码中的表达式,javascript,python,parsing,static-analysis,Javascript,Python,Parsing,Static Analysis,对不起,我想不出更好的标题了 假设我们有JavaScript代码字符串: var n = Math.floor(Math.random() * 10), className; if (n === 1) { className = "a"; } else if (n === 2) { className = "b"; } else { className = "c"; } document.querySelector("." + className); 我的想

对不起,我想不出更好的标题了

假设我们有JavaScript代码字符串:

var n = Math.floor(Math.random() * 10),
    className;

if (n === 1) {
    className = "a";
} else if (n === 2) {
    className = "b";
} else {
    className = "c";
}

document.querySelector("." + className);
我的想法是希望将所有可能的字符串发送到该特定函数(
document.querySelector
)。所以我想得到
['.a','.b','.c']
。还可能涉及多个变量,在代码中多次修改,因此列表会更长


现在我如何在Python中实现这一点?我看过PyV8,但是没有文档,所以这不是一个选项;python spidermonkey也是如此,它已经过时了。

这不是一个容易的问题。您希望通过函数生成所有可能的路径。考虑下面的代码并询问自己如何确定警报是否运行:

var n = Math.floor(Math.random() * 10),
if (Math.sqrt(n) > n) {
    alert('a');
}
计算机不知道
Math.sqrt(n)
总是小于
n
。如果不运行代码,如何确定警报不会显示


在简单的情况下,库可能能够做到这一点,但当您的函数有许多可能的路径并使用了许多函数时,您需要进行大量的分析才能得到正确的答案。

这不是一个容易的问题。您希望通过函数生成所有可能的路径。考虑下面的代码并询问自己如何确定警报是否运行:

var n = Math.floor(Math.random() * 10),
if (Math.sqrt(n) > n) {
    alert('a');
}
计算机不知道
Math.sqrt(n)
总是小于
n
。如果不运行代码,如何确定警报不会显示



在简单的情况下,一个库可能能够做到这一点,但是当你的函数有很多可能的路径并且使用了很多函数时,你需要进行一些有力的分析才能得到正确的答案,您可以采用蒙特卡罗方法:记录传递给
文档。querySelector
的所有参数,并针对各种输入运行代码。

好的,您可以采用蒙特卡罗方法:记录传递给
文档。querySelector
的所有参数,并针对各种输入运行代码。

这不是对您问题的回答,但是如果你在JavaScript中有3个类似的选项,那么你的结果就会偏向于
else
的情况:
Math.floor(Math.random()*10)%3
我不明白,你每次只能得到一个类来
querySelectorAll
只要不用担心JS,这不是问题的关键,也不是你问题的答案,但是如果你只有3个选项,你想在JavaScript中得到这样的东西,否则你的结果就会偏向于
else
case:
Math.floor(Math.random()*10)%3
我不明白,你总是一次得到一个类来
querySelectorAll
,只是不要担心JS,这不是重点,这就是重点。我只是不知道如何实现它。@seriousdev:你想解决什么问题?您不能简单地在代码中搜索所有行
className=…
,然后将它们放入列表中吗?因为解决给定的问题可能有些过分。不,因为我甚至不知道变量的名称。另外:关于
className=“toggle-”+x
?@seriousdev:我不知道有什么工具可以满足您的要求(生成JavaScript的所有可能路径)。你需要课程列表做什么?有什么不同的方法可以解决这个问题吗?是的,就是这样。我只是不知道如何实现它。@seriousdev:你想解决什么问题?您不能简单地在代码中搜索所有行
className=…
,然后将它们放入列表中吗?因为解决给定的问题可能有些过分。不,因为我甚至不知道变量的名称。另外:关于
className=“toggle-”+x
?@seriousdev:我不知道有什么工具可以满足您的要求(生成JavaScript的所有可能路径)。你需要课程列表做什么?有没有其他方法可以解决这种情况?在这种情况下是不可能的:随机性、AJAX调用等。如果运行足够多次,随机性将不会成为问题:-)在这种情况下是不可能的:随机性、AJAX调用等。如果运行足够多次,随机性将不会成为问题:-)