Dowiedziałem się na własnej skórze, że operatory bitowe na boolach nie zwracają wartości w JavaScript. Myślałem, że to błąd, ale sprawdziłem to w specyfikacji ECMAScript i na pewno mówi, że operatory bitowe zwracają liczby, a nie boole. Nie mówi ani słowa o dziwactwie, które powstaje, gdy używasz ich na wartościach boolowskich. Dlaczego tak się dzieje? Używam tej techniki od lat w innych językach, więc jestem całkowicie zaskoczony, dlaczego robi coś innego w JavaScript. Jakieś pomysły? Czy to dlatego, że nikt nie używa w ten sposób operatorów bitowych (oprócz mnie), czy jest jakiś techniczny powód? Nie mogę sobie wyobrazić, że trudno byłoby sprawdzić typ i zwrócić wartość boolowską.JavaScript: dlaczego bitowe LUB z bajtów zwraca liczbę zamiast wartości boolowskiej?
Dla porównania, następujący kod:
var found = false;
console.log(found, typeof(found));
found |= true;
console.log(found, typeof(found));
found = true;
console.log(found, typeof(found));
Produkuje następujący wynik:
false 'boolean'
1 'number'
true 'boolean'
Edit:
Wnioskiem, użyłem tego w C, C++, a ja jestem całkiem pewien PHP, chociaż nie chciałbym na to przysięgać. Tak, zdaję sobie sprawę, że C/C++ są pisane na maszynie, więc byłoby inaczej wewnętrznie. Zastanawiam się, dlaczego JavaScript zachowałby się inaczej.
Na życzenie, przykładem, jak bym zazwyczaj używają | =
var foundLowest = false;
for(var k = 0; k < someLength; ++k) {
foundLowest |= someFunctionThatReturnsTF(k);
}
if(foundLowest === true) {
/* do stuff */
}
Może dodasz jakąś próbkę przypadku rzeczywiste użytkowanie '|' lub '&' na wartościach logicznych? –
Jeśli o to chodzi, to w jakim języku mówisz '| =' z bajtami? –
Wyobrażam sobie operacje bitowe, aby zawsze zwracać wartości liczbowe, nawet dla wartości logicznych; biorąc pod uwagę kaptur, utożsamiają się z numerycznymi. Dlaczego spodziewałbyś się wartości zwracanej przez boolean? –