可以使用一些帮助解码此代码

时间:2012-05-10 22:32:35

标签: javascript decode

我正在尝试解码我​​在Raphael.js源代码中找到的这段代码(它从HSL颜色转换为RGB颜色,这只是函数的一部分):

var R, G, B, X, C;
h = (h % 360) / 60;
C = 2 * s * (l < .5 ? l : 1 - l);
X = C * (1 - abs(h % 2 - 1));
R = G = B = l - C / 2;

h = ~~h;
R += [C, X, 0, 0, X, C][h];
G += [X, C, C, X, 0, 0][h];
B += [0, 0, X, C, C, X][h];

现在,我知道h = ~~h做了什么(基本上是一个带有一些关键差异的数字),但我无法弄清楚我的生活意味着什么:

R += [C, X, 0, 0, X, C][h];

他为什么要创建一个数组,然后在其上引用[h]?他是否在一组值中找到变量h等于的值? (但如果他已经知道h的价值,为什么他会这样做?)我从来没有真正看到过这样的事情,如果是这样的话,我认为它非常聪明。

1 个答案:

答案 0 :(得分:2)

h将成为数组中的索引。这确实是一个有点复杂的代码,在这种情况下,使用switch语句或类似的东西会更清楚。 h是0到5之间的数字(模360,除以60)。