|
в JavaScript - побитовое ИЛИ.В этом случае все, что он делает, это заставляет число быть целым числом.
Побитовое ИЛИ берет два числа и сравнивает все их биты.Если один из битов равен 1, результат имеет 1 там.Таким образом, учитывая два двоичных числа 1100 и 1010, вы получите следующее:
1100
1010
----
1110
Как видите, результат имеет 1 в каждом столбце, который имеет 1. Поэтому | 0
не изменяется значение номера.
Однако, поскольку он работает с двоичным представлением целых чисел , JavaScript изменяет число на целое число перед его применением.Это означает, что 2.3 | 0
равно 2. В JavaScript.
Вы должны убедиться, что число дополняется правильно, потому что цветовой формат предполагает шесть цифр.То есть #00F000
действует там, где #F000
- нет.
Как это работает, просто.Допустим, вы передаете 34
в качестве номера цвета.0x22
- это "22"
как строка в базе 16. (Вызов toString(n)
для числа возвращает представление числа в базе n
.) Это , а не допустимый цвет, потому чтоцветам нужно шесть цифр после #
(в CSS также может быть три, но это не важно).Поэтому они сначала добавляют пять нулей в виде строки.Это означает, что "22"
становится "0000022"
.Наконец, возьмите последние шесть символов из этого: 000022
.(Вызов substr
с отрицательным индексом отсчитывается от конца строки.) Это дает им правильный цвет.
Итак, все это вместе, строка
color = '#' + ('00000' + (color | 0).toString(16)).substr(-6);
занимаетчисло, которое вы передали, превращает его в целое число с (color | 0)
, превращает его в шестнадцатеричную строку с .toString(16)
, дополняет его набором нулей, берет last шесть символов из дополненной строкии добавляет #
к нему.
На самом деле это довольно умный и элегантный способ написания этой функции.