javascript - 使用 toString() 时如何格式化函数体

标签 javascript formatting google-chrome-devtools firebug console.log

假设我从一个缩小的 JavaScript 文件中获得了这个函数:

function fn(){console.log('Lorem');console.log('Ipsum');}

我想在调用时得到一个 pretty-print 缩进版本:

console.log(fn.toString());

预期输出:

function fn() {
    console.log('Lorem');
    console.log('Ipsum');
}

代替:

function fn(){console.log('Lorem');console.log('Ipsum');}

无论如何都要这样做?

最佳答案

JavaScript 没有内置函数来执行此操作。因此,如果您想以编程方式进行 pretty-print ,则必须手动进行。 要获取函数的源代码,有一个非标准的 Function.prototype.toSource()功能,不过只有 Firefox 支持。涵盖您的示例的一个非常简单的 pretty-print 功能是:

function prettyPrint(source) {
  let formattedSource = fn.toSource ? fn.toSource() : "";

  // Add line breaks after curly braces and semicolons
  formattedSource = formattedSource.replace(/([{};])/g, "$1\n");

  // Add space after opening curly brace
  formattedSource = formattedSource.replace(/(\S)\{/g, "$1 {");

  // Indent lines ending with a semicolon
  formattedSource = formattedSource.replace(/^(.*?);/gm, "    $1;");

  return formattedSource;
}

console.log(prettyPrint(fn));

综上所述,不同的开发人员工具集成了选项,可以在其调试器中漂亮地打印 JavaScript 源代码。

Firebug :

Firebug pretty print button

Firefox 开发者工具:

Firefox DevTools pretty print button

Chrome 开发者工具:

Chrome DevTools pretty print button

关于javascript - 使用 toString() 时如何格式化函数体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35902579/

相关文章:

javascript - 尝试将其用作静态方法时未定义方法

c - 如何将 unsigned int 格式化为 8 位十六进制数?

javascript - 如何在新打开的窗口中调试 JS?

javascript - jQuery append() 在 for 循环后用于多个元素而不展平为 HTML

php - 如何使用 Javascript 提交 POST 变量?

javascript - 在 node.js 中等待用户输入

formatting - LaTeX 正式信函 : signature align left

php - JS 或 PHP 为小数添加前导零

google-chrome-devtools - Chrome 开发工具不会停靠,并且不存在停靠选项

javascript - "Pause On Caught Exceptions"过滤器