【问题标题】:List all properties used for each object in a javascript script (or set of scripts)列出用于 javascript 脚本(或一组脚本)中每个对象的所有属性
【发布时间】:2017-04-12 17:19:00
【问题描述】:

我正在寻找一种简单的方法来(通过编程方式或通过现成的工具)在给定一个脚本或一组脚本的情况下获取使用的对象列表,以及每个对象的所有属性或咨询。

我的意思是通过静态分析而不是通过运行脚本来做到这一点,即使以一定的准确性为代价(比如显示一个只在 if 中分配的属性,但永远不会发生)

(这是为了让question considered off-topic 更好地满足网站要求。非常感谢您提供帮助)


一个例子

假设我的代码有一个对象a。 我的代码的某些行显示为a={var1:true} 另一行是a.var2=false 第三行为a['pineapple']='pen'

还有像b = a.properf(a.cold)这样的“gets”

几乎不能指望我的程序能够判断给定的行是否会运行。

我会非常满意输出“a 可能是一个对象并具有属性 var1,var2,pineapple,proper,cold”,甚至更高兴的是“a 可能是一个对象。你设置属性var1,var2,pineapple。另外,你正确读取了属性,cold"

由于拼写错误,我基本上想抓住自己使用未定义的属性,而不是做任何精致的逻辑。

【问题讨论】:

    标签: javascript static-analysis


    【解决方案1】:

    在浏览器中尝试 F12 键盘键。在出现的面板中单击“控制台”选项卡(请参阅Console Screenshot),然后输入以下内容:

    console.log(window);
    

    一旦“Window”对象出现在控制台日志中,点击它,在最右边会弹出一个属性面板。

    注意:这个“窗口”对象包含当前页面上的所有对象,您可以通过属性面板访问它的属性。您也可以 console.log 任何其他变量/对象。

    (适用于 chrome 或 mozilla)

    Mozilla 开发者工具 - https://developer.mozilla.org/en-US/docs/Tools

    【讨论】:

      【解决方案2】:

      tl;dr:我认为这不存在,因为您的大部分 javascript 数据要到运行时才可用。

      为什么?

      这是因为动态 JS 可以说你在代码中的某处有一个对象 var a = { val1: true }; 可能是沿着 a.val2 = false; 行的另一行,你实际上无法得到模型(或值)a = { val1: boolean, val2: boolean } 无需以某种方式运行 JS 以获得对象的最终潜在结构。

      注意:这只是 javascript 多功能性的一个示例,还有更多示例,但我选择了它,因为它相当直接,并且直接与问题相关

      但它是一个对象?

      对于任何从非 javascript 背景看这篇文章的人来说,javascript 中的对象并不是你想象的那样:它们没有严格的结构。 Javascript 对象允许您在运行时而不是在“编译”时修改它们的内部属性(原型)和常规属性(注意 javascript 是解释的,而不是编译的)。虽然您可以使用原型来模仿 OOP 对象的行为,但整个问题对问题并不重要。

      那么可以做什么?

      我知道您特别提到不运行脚本,但大多数(如果不是全部)现代浏览器都包含一个 javascript 调试器,允许进行高级调试(断点、表达式值、变量值等)。 Aaand 作为另一个答案提到 console.log() 是你的朋友。

      我希望这会有所帮助,但如果有人知道某个工具,请指出我的错误:我没有四处寻找可以做到这一点的东西。

      注意:我假设您正在寻找一个与用户定义变量特别相关的列表,而不是范围、数组、函数等的底层对象实现。

      【讨论】:

      • 在这种情况下,我对properties used for object a might include val1 and val2的答案非常满意
      • 有趣的想法,拥有一个可以对 javascript 进行这种分析的工具会很酷...听起来可行,但如果问题还有更多,我不会感到惊讶比满足眼睛
      猜你喜欢
      • 1970-01-01
      • 2017-02-21
      • 1970-01-01
      • 1970-01-01
      • 2021-07-07
      • 2017-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多