我正在尝试解码我在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
的价值,为什么他会这样做?)我从来没有真正看到过这样的事情,如果是这样的话,我认为它非常聪明。
答案 0 :(得分:2)
h
将成为数组中的索引。这确实是一个有点复杂的代码,在这种情况下,使用switch语句或类似的东西会更清楚。 h
是0到5之间的数字(模360,除以60)。