Z ciekawości: Dlaczego potrzebujesz literałów binarnych w Javascript? Wysokopoziomowy charakter Javascript oznacza, że zwykle nie wymaga on interakcji z konstrukcjami niskiego poziomu, które wymagałyby literałów binarnych.
Nowsze wersje JavaScript - w szczególności ECMAScript 6 - dodały obsługę literałów liczbowych binarnych (prefiks 0b), ósemkowych (prefiks 0o) i szesnastkowych (prefiks 0x:):
var bin =0b1111;// bin will be set to 15var oct =0o17;// oct will be set to 15var oxx =017;// oxx will be set to 15var hex =0xF;// hex will be set to 15// note: bB oO xX are all valid
Ta funkcja jest już dostępna w przeglądarkach Firefox i Chrome. Obecnie nie jest obsługiwany w IE, ale najwyraźniej będzie, gdy pojawi się Spartan.
Nie, nie ma odpowiednika dla liczb binarnych. JavaScript obsługuje tylko literały numeryczne w formacie dziesiętnym (bez przedrostka), szesnastkowym (przedrostek 0x) i ósemkowym (przedrostek 0).
Jedną z możliwych alternatyw jest przekazanie ciągu binarnego do parseIntmetody wraz z podstawą:
var foo = parseInt('1111',2);// foo will be set to 15
Technicznie rzecz biorąc, JavaScript nie obsługuje notacji ósemkowej, chociaż większość (wszystkie?) Przeglądarki ją obsługują. Jest to wyraźnie zabronione w trybie ścisłym.
Zauważ, że wewnętrznie w JavaScript każda liczba jest 64-bitową liczbą zmiennoprzecinkową, nie ma czegoś takiego jak liczba całkowita. W ten sposób przy dużych liczbach tracisz dokładność. Największa dokładna liczba całkowita to 2 ^ 53, czyli 9007199254740992.
Istnieją liczby całkowite, ponieważ liczba całkowita jest terminem matematycznym, nie ma int typeani integer type, więc wszystkie liczby całkowite są przechowywane jako liczby zmiennoprzecinkowe .
W tamtym czasie ta odpowiedź była prawdziwa, ale przydałaby się aktualizacja. Jak podkreśla Urish w swojej odpowiedzi poniżej, w ES6 znajdują się literały liczb binarnych i ósemkowych (ósemki są teraz zapisywane jako „0o1”). Wylądowali już w Firefoksie, Chrome, a nawet w wersji zapoznawczej nowego IE (Spartan).
Wiem, że ludzie mówią, że rozbudowa prototypów to nie jest dobry pomysł, ale taki był twój scenariusz ...
Robię to w ten sposób:
Object.defineProperty(Number.prototype,'b',{set:function(){returnfalse;},get:function(){return parseInt(this,2);}});100..b // returns 411111111..b // returns 51110..b+1// returns 3// and so on
O ile wiem, w Javascript nie można używać binarnego denotera. Mam dla ciebie trzy rozwiązania, z których wszystkie mają swoje problemy. Myślę, że alternatywa 3 jest najbardziej „ładna” pod względem czytelności i prawdopodobnie jest znacznie szybsza niż reszta - z wyjątkiem początkowego kosztu czasu wykonania. Problem w tym, że obsługuje tylko wartości do 255.
Śliczne, choć trochę dziwne. Ale to jest JavaScript dla Ciebie. binma przypisaną liczbę, która wygląda na binarną, ale w rzeczywistości jest analizowana jako podstawa 10. parseIntFunkcja oczekuje łańcucha jako pierwszego argumentu, więc zamienia go na "1111" (reprezentacja o podstawie 10), a następnie przetwarza go ponownie tak, jakby była to baza 2.
Wiem, że to właściwie nie odpowiada na zadane pytanie (na które udzielono już odpowiedzi kilka razy), ale sugeruję, abyś (lub inni zainteresowani tym tematem) wzięli pod uwagę fakt, że najbardziej czytelny i kompatybilny z poprzednimi / przyszłymi / różnymi przeglądarkami sposobem byłoby po prostu użycie reprezentacji szesnastkowej.
Z wyrażenia Q wydaje się, że mówisz tylko o używaniu literałów binarnych w swoim kodzie, a nie o przetwarzaniu binarnych reprezentacji wartości liczbowych (dla których parstInt jest właściwą drogą).
Wątpię, czy jest wielu programistów, którzy muszą obsługiwać liczby binarne, którzy nie są zaznajomieni z mapowaniem 0-F na 0000-1111. więc zasadniczo utwórz grupy po cztery i użyj notacji szesnastkowej.
więc zamiast pisać 101000000010 użyłbyś 0xA02, który ma dokładnie to samo znaczenie i jest znacznie bardziej czytelny i rzadziej zawiera błędy.
Weź pod uwagę czytelność. Spróbuj porównać, który z nich jest większy: 10001000000010010 lub 1001000000010010
parseInt (bez drugiego parametru) konwertuje ciąg binarny z powrotem na liczbę podstawową 10! np. 0b100 (4) staje się 100, a następnie przez alert zostaje zamieniony z powrotem w łańcuch!
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.