Какой смысл в записи queueSize | 0 ? (javascript)

Я переписываю код javascript на C#. И не могу понять какой смысл записи queueSize | 0 в выражении:

  var i = Math.random() * queueSize | 0,
      s = queue[i],
      j = 0;

| - это Присваиванием с побитовым OR

Побитовый оператор присваивания OR использует двоичное (бинарное) представление обоих операндов, выполняет побитовое ИЛИ для них и присваивает результат переменной.

Оператор: x |= y 
Значение:  x  = x | y

var bar = 5;
bar |= 2; // 7
// 5: 00000000000000000000000000000101
// 2: 00000000000000000000000000000010
// -----------------------------------
// 7: 00000000000000000000000000000111

тут же какое бы не было значение queueSize , выражение queueSize | 0 будет всегда значение queueSize. В коде это просто лишнее действие или имеет какой то смысл такое выражение queueSize | 0 ? Не могу понять. javascript изучал давно.


Ответы (2 шт):

Автор решения: Aziz Umarov

Смысл простой что не былo undefined в итоге. Чтоб индекс был адекватным,а не NaN или undefined

console.log(undefined | 0) или console.log(undefined) 
console.log(NaN | 0) или console.log(NaN)
→ Ссылка
Автор решения: OPTIMUS PRIME

Math.random() возвращает число между 0 и 1, которое дальше в коде используется как индекс, который должен быть целым числом. Побитовый | с нулем ничего не делает, но отбрасывает дробную часть. Фактически, это то же самое, что и Math.trunc(n) или parseInt(n)

let queueSize = 10;
let rand = Math.random();

console.log( rand * queueSize );
console.log( rand * queueSize | 0 );

// Побочка: всё, что NaN - превращает в ноль
console.log( undefined | 0 );
console.log( NaN | 0 );
console.log( "moo" | 0 );

Его в первую очередь используют для получения целого числа. Если нужно избавиться только от NaN, обычно используют логическое ИЛИ Math.random() * queueSize || 0;

→ Ссылка