Ho scoperto che gli operatori bit a bit sui bool non restituiscono bool in JavaScript. Ho pensato che dovesse essere un bug, ma l'ho cercato nelle specifiche ECMAScript, e sicuramente, dice che gli operatori bit a bit restituiscono numeri, non bool. Non dice una parola sulla stranezza che risulta quando le stai usando su valori booleani. Perché è fatto in questo modo? Ho usato questa tecnica per anni in altre lingue, quindi sono totalmente sconcertato perché fa qualcosa di diverso in JavaScript. Qualche idea? È solo perché nessuno usa mai operatori bit a bit in questo modo (tranne me), o c'è una ragione tecnica? Non riesco a immaginare che sarebbe difficile controllare il tipo e restituire un booleano.JavaScript: perché l'OR bit a bit dei booleani restituisce un numero anziché un valore booleano?
Per riferimento, il codice seguente:
var found = false;
console.log(found, typeof(found));
found |= true;
console.log(found, typeof(found));
found = true;
console.log(found, typeof(found));
produce il seguente output:
false 'boolean'
1 'number'
true 'boolean'
Edit:
Su richiesta, ho usato questo in C, C++, e sono abbastanza sicuro di PHP, anche se non lo giurerei. Sì, mi rendo conto che C/C++ è stato digitato, quindi sarebbe diverso internamente. Mi sto solo chiedendo perché JavaScript si comporterebbe diversamente.
Su richiesta, un esempio di come avrei utilizzano in genere | =
var foundLowest = false;
for(var k = 0; k < someLength; ++k) {
foundLowest |= someFunctionThatReturnsTF(k);
}
if(foundLowest === true) {
/* do stuff */
}
maggio si aggiungere un po 'esempio di un caso d'uso reale del '|' o 'e' su valori booleani? –
Del resto, che lingua stai dicendo supporta '| =' con i booleani? –
Immagino che operazioni bit a bit restituiscano sempre valori numerici, anche per i booleani; considerando che sotto il cofano si identificano con i numeri stessi. Perché dovresti aspettarti un valore di ritorno booleano? –