【问题标题】:javascript code highlight with new lines and indentation用新行和缩进突出显示 javascript 代码
【发布时间】:2011-08-01 01:43:46
【问题描述】:

我正在编写一个小的单页应用程序(使用 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 中获得准确结果的方法,或者正确

任何帮助将不胜感激,没有得到我想要使应用程序完美的结果真的很令人沮丧:)

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

【问题讨论】:

    标签: javascript function tostring codehighlighter


    【解决方案1】:

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

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

    ECMA–262 15.3.4.2 Function.prototype.toString ( )

    函数的依赖于实现的表示是 回来。此表示具有 FunctionDeclaration 的语法。 特别注意空白、行的使用和放置 表示字符串中的终止符和分号是 依赖于实现。

    如果您希望脚本内容的格式合理,请获取对脚本元素的引用并使用其 textContentinnerText(无论哪个受支持)。

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

    【讨论】:

    • 啊哈!关键部分是依赖于实现,这是我在浏览文档时跳过的。我知道编译器/解释器可能会进行优化,但你会认为如果它要做任何事情,它只会一路删除整个代码路径,因为它永远不会被执行!
    • @mr.nicksta - '' 和 0 永远不会为真,因为它们是只能具有一个值的基元。但是,可以为 undefinedNaN 分配新值。不知道为什么 null 仍然存在。
    • 好点!忘记了;尽管经常看到undefined 被传递到自执行函数中以保持其价值!正如你所指出的,奇怪的是 null 仍然存在......我想我可以通过在 if 语句之前将 0"" 分配给变量来强制代码以更精确的方式打印 - 因为它不能那时保证这些值是错误的,因此不应该进行优化——这对于一个例子来说应该足够了。感谢您的帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多