0

我正在编写一个小单页应用程序(使用 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 从字符串表示中删除某些代码部分,那就太好了

4

1 回答 1

1

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

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

ECMA–262 15.3.4.2 Function.prototype.toString ( )

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

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

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

于 2011-08-01T05:04:54.253 回答