Выделение кода JavaScript с помощью новых строк и отступов - PullRequest
0 голосов
/ 01 августа 2011

Я пишу небольшое одностраничное приложение (использующее knockout.js :-)), в результате чего у меня есть серия примеров кода javascript. этот код обернут в функцию, и я вызываю функцию toString для отображения исходного кода в браузере.

в целом все отлично работает! но из-за характера примеров (в качестве учебных упражнений) они содержат некоторый код, который обычно можно считать избыточным. например, этот код является примером, который демонстрирует значения false-y в javascript:

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. Или маркер, который обеспечивает простую расширяемость для предоставления такого рода функции

  1. менее вероятное решение: , если кто-нибудь знает способ получить точные результаты в FF или правильно

любая помощь будет высоко ценится, это действительно разочаровывает, не получая результатов, я хочу сделать приложение идеальным:)

РЕДАКТИРОВАТЬ: кажется, я был плотным, IE правильно форматирует, просто с основными примерами, с которыми я работал при создании приложения, я объявил функции как одну строку, поэтому форматирование было перенесено окончательно! Так что на этот раз в истории Интернета IE делает именно то, что вы ожидаете, без проблем :) Было бы неплохо, если бы кто-то мог предложить причину для Firefox отбросить определенные части кода из строкового представления

1 Ответ

1 голос
/ 01 августа 2011

Во-первых, скриптовые движки могут оптимизировать код.Если компилятор видит ветви, которые никогда не будут выполняться, он может их обрезать.

Во-вторых, Function.prototype.toString зависит от реализации:

ECMA – 262 15.3.4.2Function.prototype.toString ()

Возвращается зависящее от реализации представление функции.Это представление имеет синтаксис FunctionDeclaration.В частности, обратите внимание, что использование и размещение пробелов, ограничителей строки и точек с запятой в представлении String зависит от реализации.

Если вы хотите, чтобы содержимое сценария было разумно отформатировано, получите ссылку наэлемента скрипта и используйте его textContent или innerText (в зависимости от того, что поддерживается).

Но если вы хотите правильно отформатированный код, найдите " javascript pretty print "или сделайте это самостоятельно в HTML.

...