Javascript中的奇怪语法

7

我正在调试别人写的代码(使用Mootools作为基础库),我发现了这个函数:

[note, $H(options.text).getKeys()].flatten().each(function(option){
  // bunch of stuff happening
});

我以前从未见过这种语法,带有方括号和$H符号(例如[note, $H(options.text).getKeys()])。有人能解释一下它是如何工作的,或者给我提供相关参考资料吗?
谢谢!

1
[] 是一个数组字面量。$H() 调用了一个名为 $H 的函数。这与 var myarray = []; myarray[0] = 'some val'; myarray[1] = some_func('some arg').some_other_func(); 没有区别。 - RightSaidFred
2个回答

6
这基本上是将两个数组聚合在一起。例如,看这段代码:
var a = [1,2,3];
var b = [4,5,6];
var c = [a, b].flatten();
alert(c);

数组[1,2,3][4,5,6]被合并(或“展开”)成一个单一的数组,1,2,3,4,5,6

在您的代码中:

[note, $H(options.text).getKeys()].flatten()
< p > note(也许是另一个数组)和 getKeys() 返回的内容被展开成一个单一的数组。然后,在每个元素上执行一个函数。

更新:

$H functionMootools中的一个实用函数,它是Hash()的快捷方式。


1
我并不是很了解Mootools,但在Javascript中,“$”是一个完全有效的函数名称。jQuery将其用于其主要选择器函数。我不确定“$H”函数是什么或者是谁定义的(它看起来几乎像是被压缩或缩小的代码?)-也许一些Mootools的人可以发表意见。 - Mike Christensen
@Mike-- 我在原帖中添加了更多信息,其中包括脚本中 $H 的唯一其他用法。 - julio
我查了一下,$H是Mootools中Hash()的快捷方式 - http://mootools.net/docs/more/Types/Hash#H - Mike Christensen
天啊,每次我在Mootools中看到像julio这样的$函数时,我总会有点不安,主要是因为除非涉及到PHP,否则在javascript中不会看到任何$。虽然其他的 $... 函数已经被弃用或替换成其他名称,所以我会谨慎使用它作为快捷方式。(顺便说一下,我也可能完全错了。)我在想的具体例子是 $clear,已经被弃用,推荐使用 clearTimeout(); - Julian H. Lam
对象泛型已经使哈希变得多余了,它存在的原因是为了能够在不这样做的情况下获得原型对象的效果。如果你想要一个数据表,有一个表类型 - 否则,现在请使用对象。 - Dimitar Christoff
显示剩余3条评论

1
[note, $H(options.text).getKeys()]

最有可能变成:

[note, ["string1", "string2"]]

所以它返回一个数组。因此,["whatever note is", ["Another array", "of objects"]] 需要被展平为:

["whatever note is", "Another array", "of objects"]

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