我正在写一个小的单页应用程序(使用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()
,则返回的字符串不包含0
,null
或""
- 所以我的示例没有准确描绘!但是,在IE中,上述值包含在toString()
调用的结果中,但字符串只是一行 - 没有缩进或任何东西!
所以我想知道的是
<击> 1。 更可能的解决方案:任何人都知道 JS实现的代码荧光笔将处理 格式化/缩进对我来说,如果给出一个长的单行字符串 的JavaScript代码。或者是一种允许简单扩展性的荧光笔来提供这种功能
任何帮助都会非常感激,如果没有得到我想让应用程序完美的结果,真的很令人沮丧:)
编辑:似乎我是密集的,IE确实格式正确,它只是我在构建应用程序时使用的基本示例我将函数声明为单行,因此格式化是完全结转!因此,对于网络历史上的一次,IE完全符合您的预期,没有任何问题:)如果有人可以提供firefox从字符串表示中删除代码的某些部分的原因,那将会很好
答案 0 :(得分:1)
首先,允许脚本引擎优化代码。如果编译器看到永远不会执行的分支,它可能会修剪它们。
其次, Function.prototype.toString 依赖于实现:
函数的依赖于实现的表示是 回。此表示具有FunctionDeclaration的语法。 特别注意使用和放置白色空间,线条 终结符和表示字符串中的分号是 实现相关的。
如果您希望脚本内容的格式合理,请获取对script元素的引用并使用其 textContent 或 innerText (以支持者为准)。
但是如果您想要格式正确的代码,请搜索“javascript pretty print”或在HTML中自行完成。