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

问题描述:

我试图解码我在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的价值?)我从来没有见过这样的事情,如果是这种情况,我认为它非常聪明。

h将是数组中的索引。这确实是一个有些令人费解的代码,也许使用switch语句或类似的东西在这种情况下会更清晰。 h是一个0到5之间的数字(模数360,除以60)。

+0

Oho,这很有趣。感谢您的解释! –