Javascript логические операторы и результаты

Я знаю, что результатом логических операций в большинстве языков является true, false или 1,0. В Javascript я попробовал следующее:

alert(6||5)  // => returns 6
alert(5||6)  // => returns 5
alert(0||5)  // => returns 5
alert(5||0)  // => returns 5
alert(5||1)  // => returns 5
alert(1||5)  // => returns 1
alert(5&&6)  // => returns 6
alert(6&&5)  // => returns 5
alert(0&&5)  // => returns 0
alert(5&&0)  // => returns 0
alert(-1&&5) // => returns 5
alert(5&&-1) // => returns -1  

Так каков результат логических операторов? Если один операнд равен 0 или 1, он работает как ожидалось. Если оба отличны от нуля и отличны от 1, то

In case of logical or, the first operand is returned In case of logical and, the second operand is returned

Это общее правило?

Еще одна вещь, которую я не знаю, это оператор|.

Я пробовал оператора| и получил разные результаты:

alert(5|8)  // => returns 13 
alert(8|5)  // => returns 13 
alert(-5|8) // => returs -5
alert(8|-5) // => returns -5
alert(0|1)  // => returns 1 
alert(1|0)  // => returns 1
alert(1|1)  // => returns 1

Что на самом деле делает этот оператор?

Ответы на вопрос(2)

Ваш ответ на вопрос