Подтвердить что ты не робот

".split(" ") в SO javascript

Я видел много идиом, большинство из которых были умны и логичны, когда-то объяснялись. Но пока я просматривал SO javascript, чтобы получить некоторые идеи о хорошем дизайне интерфейса, я увидел следующую строку:

initTagRenderer("".split(" "), "".split(" "));

Что действительно бросило меня за цикл. Очевидно, что они инициализируют средство визуализации тегов двумя массивами, содержащими ровно один аргумент с нулевой строкой (или [""], который оценивается "".split(" ")). Эта часть я понимаю (проделав то же самое в своем собственном коде). Но похоже, что передача литерала выполнила бы то же самое.

Есть ли какая-то неочевидная причина для этого, которую я не вижу в качестве новичка (для js, а не для программирования)?

Кроме того, я попытался выполнить поиск и получил много информации о самом split() (что я уже хорошо понимаю), но не идиома; Googling для двойных кавычек довольно бесплоден.

Изменить: Это был очевидный ответ. Эта часть кода динамически генерируется и обычно не заполняется надлежащим SO.

4b9b3361

Ответ 1

Вероятно, есть серверный код, который динамически заполняет эти аргументы, чтобы выглядеть примерно так:

initTagRenderer("javascript php".split(" "), "ruby lisp".split(" "));

Что делает эта функция, я понятия не имею. Но для этого требуется массив имен тегов, и ему проще генерировать список с разделителями, а не литерал массива JS.

Изменить

После некоторых героических исследований, похоже, что initTagRenderer действительно красиво форматирует теги вопроса. Тегам, которые соответствуют имени в первом параметре, присваивается класс required-tag, а тегам, которые соответствуют второму параметру, присваивается класс moderator-tag.

По словам Мадмартигана, он использовал мета:

initTagRenderer(
     "bug feature-request discussion support".split(" "),
     "faq status-completed status-declined status-bydesign status-norepro status-reproduced status-planned status-deferred status-review featured community-ads".split(" ")
);

Просмотреть пример


Соответствующая (но уменьшенная) строка full.js:

function initTagRenderer(f,c){window.tagRenderer||(window.tagRendererRaw=function(b,g){var g=g||"",e="";g||(f&&-1<$.inArray(b,f)?e=" required-tag":c&&-1<$.inArray(b,c)&&(e=" moderator-tag"));return"<a class='post-tag"+e+"' href='"+g+"/info/tagged/"+encodeURIComponent(b)+"' title=\"show questions tagged '"+b+"'\" rel='tag'>"+b+"</a>"},window.tagRenderer=function(b,c){return $(tagRendererRaw(b,c))})}