Jak mogę sprawdzić, czy typ zmiennej jest typu Boolean?
Mam na myśli kilka alternatyw, takich jak:
if(jQuery.type(new Boolean()) === jQuery.type(variable))
//Do something..
Ale to nie wydaje mi się ładne.
Czy istnieje czystszy sposób na osiągnięcie tego?
javascript
jquery
types
Matias Cicero
źródło
źródło
true
lubfalse
typu Boolean?!!( ... some expression ...)
a wynik będzie logiczny.true
ifalse
są prymitywami typuboolean
. Kapital B typu Boolean jest typem opakowania obiektu dla operacji logicznych.if (new Boolean(false)) alert("hi");
- boolowski obiekt typu B jest zawsze „prawdziwy”, niezależnie od wartości logicznej little-b.Odpowiedzi:
Po to
typeof
jest. Nawiasy są opcjonalne, ponieważ jest to operator .źródło
typeof
.typeof
nie jest funkcją. 2) Używanie potrójnego operatora === ztypeof
nie jest wymagane, ponieważ zawsze zwraca ciąg (afaik, ale o ile pamiętam, był inny przypadek dla niektórych bardzo starych przeglądarek). 3)typeof
i porównania ciągów są powolne. Nie używaj ich. Sprawdź bezpośrednio za pomocą(variable === true || variable === false)
(proponuję napisać funkcję).typeof(variable) === typeof(true)
byłby bardziej solidny?name
to globalna właściwość okna ze specjalnym programem pobierającym developer.mozilla.org/en-US/docs/Web/API/Window/nametypeof true
zamiast"boolean"
. Nowe wersje ECMAScript nigdy nie będą miały przełomowych zmian.Jeśli chcesz po prostu sprawdzić pierwotną wartość
Jeśli z jakiegoś dziwnego powodu masz booleany utworzone za pomocą konstruktora, nie są to tak naprawdę booleany, ale obiekty zawierające prymitywną wartość boolowską, a jednym ze sposobów sprawdzenia zarówno prymitywnych boolanów i obiektów utworzonych za pomocą
new Boolean
jest:Pokaż fragment kodu
źródło
new Boolean()
, która technicznie nie jest wartością logiczną, ale jest obiektem, ale nadal trzyma wartość logiczna.new Boolean()
zwraca obiekt (patrz komentarze do pytania). Ale cokolwiek :)typeof variable === typeof new Boolean()
i prawdopodobnie po prostu chcę regularnego sprawdzania typu, ale jakoś wpadło w jakąś dziwną składnię jQuery.bool
param przekazany był nadal oceniać i Wyjątkiem byłyby wyrzucone na wywołaniu . Dlatego zmieniłbym ten ostatni wiersz na przeczytany: który oceni tylko wtedy, gdy nie jest pusty.null
typeof bool === 'object'
TypeError: Cannot read property 'valueOf' of null
typeof bool.valueOf()
(typeof bool === 'object' && bool && typeof bool.valueOf() === 'boolean');
bool
Dzięki czystemu JavaScriptowi możesz po prostu użyć
typeof
i zrobić coś takiegotypeof false
lub,typeof true
a on zwróci"boolean"
...Ale to nie jedyny sposób, aby to zrobić, poniżej tworzę funkcje, aby pokazać różne sposoby sprawdzania Boolean w JavaScript, a także różne sposoby, w jakie możesz to zrobić w niektórych nowych ramach, zacznijmy od tego:
Lub jedno-liniowy sposób ES6 ...
i nazwij to tak!
Również w kodzie źródłowym podkreślenia sprawdzają to w ten sposób (z _. Na początku nazwy funkcji):
Również w jQuery możesz to sprawdzić w następujący sposób:
W React , jeśli używasz propTypes, możesz sprawdzić wartość logiczną:
Jeśli używasz TypeScript , możesz także użyć typu boolean :
Innym sposobem na zrobienie tego jest konwersja wartości na wartość logiczną i sprawdzenie, czy nadal jest dokładnie taka sama, na przykład:
lub jak:
i nazwij to!
Nie jest zalecane używanie do tego żadnych ram, ponieważ jest to naprawdę proste sprawdzenie w JavaScript.
źródło
new Boolean(true) === new Boolean(true)
powinien zwrócić wartość false (ponieważ odniesienia są różne). DlategoisBoolean(new Boolean(true))
powie fałszywe, podczas gdy musi być prawdziwe (new Boolean(true)
typu boolean ).Istnieją trzy „waniliowe” sposoby na sprawdzenie tego z lub bez jQuery.
Najpierw należy wymusić ocenę logiczną przez przymus, a następnie sprawdzić, czy jest równa pierwotnej wartości:
Przeprowadzanie prostej
typeof
kontroli:Wykonanie całkowicie przesadnej i niepotrzebnej instancji opakowania klasy na prymitywie:
Trzeci powróci tylko
true
wtedy , gdy utworzysznew Boolean
klasę i przekażesz ją.Aby rozwinąć przymus prymitywów (jak pokazano w punkcie 1), wszystkie typy prymitywów można sprawdzić w ten sposób:
Boolean
:Number
:String
:źródło
typeof
? Szczerze w to wątpie.typeof
to również 1 przymus, aletypeof
metoda wykonuje kilka pobrań i porównań wewnątrz + 1 porównanie na samym końcu. Oto odniesienie do V8 dlatypeof
!!
jest szybszy, mówi się, żeBoolean
jest szybszy. Tylko odniesienie do tego, jak mała jest różnica między testami. Kontrola logiczna przebiega szybko. jsperf.com/bool-not-not jsperf.com/bool-vs-doublenottypeof val === "boolean"
są optymalne.Aby to osiągnąć, możesz użyć czystego Javascript.
źródło
Jeśli chcesz, aby Twoja funkcja mogła również sprawdzać poprawność obiektów boolowskich, najbardziej wydajnym rozwiązaniem musi być:
źródło
Najbardziej wiarygodnym sposobem sprawdzenia typ zmiennej w JavaScripcie jest następujący :
Powodem tej komplikacji jest to, że
typeof true
wraca"boolean"
podczastypeof new Boolean(true)
powrotu"object"
.źródło
"boolean"
jeśli wartość naprawdę jest przedmiotem? Nie wydaje mi się to zbyt praktyczne. Zresztą obiekty boolowskie muszą być traktowane inaczej niż prymitywy boolowskie.Wybrałbym Lodash: isBoolean sprawdza, czy przekazana zmienna jest pierwotnym obiektem typu boolean, czy też obiekt logiczny Boolean, a więc uwzględnia wszystkie przypadki.
źródło
Możesz utworzyć funkcję, która sprawdza
typeof
argument.źródło
Czasami potrzebujemy jednego sposobu, aby to sprawdzić. typeof nie działa na randkę itp. Ułatwiłem więc
Również
Number
,String
,Boolean
itd. Często musimy sprawdzić typ w jednym drodze ...źródło
Tworzenie funkcji takich jak
isBoolean
onelinertypeof v === "boolean"
wydaje się w dłuższej perspektywie bardzo niewygodne. Jestem zaskoczony, że prawie wszyscy sugerują stworzenie własnej funkcji. Wydaje się, że jest to ten sam rak, co rozszerzanie natywnych prototypów.po prostu zapamiętaj
typeof v === "boolean"
i to wszystko. Dodaj szablon do swojego IDE, aby móc go umieścić za pomocą trzyliterowego skrótu i być szczęśliwym.źródło
v === true || v === false
, w przypadku 2 weryfikacjifalse
. Ranking: (1 - oba są praktycznie takie same)typeof v === 'boolean
oraztypeof v === typeof true
, (2)isBoolean(v)
, (3)v === true || v === false
.jeśli masz ciąg
źródło
val === false || val === true
.typeof variable == typeof true
.Najkrótsza, ale nie w ogóle czytelny:
!!val === val
.Wyjaśnienie:
Testy:
źródło
W nodejs za pomocą node-boolify możemy użyć isBoolean ();
źródło
Jeszcze jedna decyzja z funkcją strzałki es2015
źródło