javascript代码突出显示新行和缩进

时间:2011-08-01 01:43:47

标签: javascript function tostring codehighlighter

我正在写一个小的单页应用程序(使用knockout.js :-)),我有一系列的javascript代码示例。这段代码包含在一个函数中,我在函数上调用toString来在浏览器中显示源代码。

总的来说一切都很棒!但由于示例的性质(作为学习练习),它们包含一些通常被认为是冗余的代码。例如,此代码是一个演示javascript中的false-y值的示例:

var example = function() {
    if("" || 0 || null || undefined || NaN) {
     console.log("i'll never be logged");
    }
    else {
     console.log("i'll always be logged");
    }
};

在firefox中,如果我调用example.toString(),则返回的字符串不包含0null"" - 所以我的示例没有准确描绘!但是,在IE中,上述值包含在toString()调用的结果中,但字符串只是一行 - 没有缩进或任何东西!

所以我想知道的是

<击> 1。 更可能的解决方案:任何人都知道     JS实现的代码荧光笔将处理     格式化/缩进对我来说,如果给出一个长的单行字符串     的JavaScript代码。或者是一种允许简单扩展性的荧光笔来提供这种功能

  1. 不太可能的解决方案:如果有人知道如何在FF中获得准确的结果,或者正确
  2. 任何帮助都会非常感激,如果没有得到我想让应用程序完美的结果,真的很令人沮丧:)

    编辑:似乎我是密集的,IE确实格式正确,它只是我在构建应用程序时使用的基本示例我将函数声明为单行,因此格式化是完全结转!因此,对于网络历史上的一次,IE完全符合您的预期,没有任何问题:)如果有人可以提供firefox从字符串表示中删除代码的某些部分的原因,那将会很好

1 个答案:

答案 0 :(得分:1)

首先,允许脚本引擎优化代码。如果编译器看到永远不会执行的分支,它可能会修剪它们。

其次, Function.prototype.toString 依赖于实现:

ECMA-262 15.3.4.2 Function.prototype.toString()

  

函数的依赖于实现的表示是   回。此表示具有FunctionDeclaration的语法。   特别注意使用和放置白色空间,线条   终结符和表示字符串中的分号是   实现相关的。

如果您希望脚本内容的格式合理,请获取对script元素的引用并使用其 textContent innerText (以支持者为准)。

但是如果您想要格式正确的代码,请搜索“javascript pretty print”或在HTML中自行完成。