"".split(" ") in SO's javascript

13

我看过很多成语,大部分在解释后都很聪明且合乎逻辑。但是当我浏览SO的JavaScript以获取一些关于良好界面设计的想法时,我看到了以下代码:

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

这真的让我很困惑。显然,他们使用两个包含一个空字符串参数([""], "".split(" ") 的结果)的数组来初始化标记渲染器。我理解这一部分(因为我在自己的代码中也这么做了)。但似乎传递文字也能达到同样的效果。

作为一个新手(对js不是编程),我是否忽略了一些非常明显的原因而无法理解?

另外,我尝试过搜索,得到了关于 split() 本身的大量信息(我已经非常了解了),但没有关于该习语的信息;谷歌双引号几乎没有任何有用的结果。

编辑:这是代码的动态生成部分,并且通常不会在 SO 上填充。


5
很可能这是由服务器动态生成的值,在这种情况下,它只填充了一个空字符串。 - Andy Ray
1
我考虑过这个问题,但是我无法在网站上找到那一行与众不同的地方。虽然这可能只是因为我的账户相对较新。 - bkconrad
2
我在检查过的任何地方都没有看到它被填充。 - Wesley Murch
1
源代码在这里:http://cdn.sstatic.net/js/full.js?v=f1c33d3703f2。类似于`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+"/questions/tagged/"+encodeURIComponent(b)+"' title="show questions tagged '"+b+"'" rel='tag'>"+b+"</a>"},window.tagRenderer=function(b,c){return $(tagRendererRaw(b,c))})}`。 - Wesley Murch
1个回答

9

可能有服务器端代码动态地填充这些参数,以类似于下面的方式:

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

我不知道那个函数具体是做什么的,但它必须需要一个标签名的数组,生成一个以空格分隔的列表比生成JS数组字面量更容易。

编辑

经过一些英勇的调查,发现initTagRenderer确实可以很好地格式化问题标签。与第一个参数匹配的标签将被赋予required-tag类,而与第二个参数匹配的标签将被赋予moderator-tag类。

根据Madmartigan的说法,它在meta上被使用:

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+"/questions/tagged/"+encodeURIComponent(b)+"' title=\"show questions tagged '"+b+"'\" rel='tag'>"+b+"</a>"},window.tagRenderer=function(b,c){return $(tagRendererRaw(b,c))})}

3
我认为这个可以为问题添加标签,例如“javascript”或“stackoverflow.com”。 - bkconrad
4
在 Meta 上,它被用于必填标签和仅限管理员使用的标签(红色标签):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(" ")); - Wesley Murch
@bkconrad,一点也不蠢!你是对的——没有人会手动编写那样的东西。服务器端代码会产生一些客户端异常,因为你无法检查它。 - benesch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接