Come verificare se il tipo è booleano


269

Come posso verificare se il tipo di una variabile è di tipo booleano?

Voglio dire, ci sono alcune alternative come:

if(jQuery.type(new Boolean()) === jQuery.type(variable))
      //Do something..

Ma questo non mi sembra carino.

C'è un modo più pulito per raggiungere questo obiettivo?


1
Non sono trueo falsedi tipo booleano?
— Matias Cicero,

1
Non è necessario controllare, è possibile farlo !!( ... some expression ...)e il risultato sarà un valore booleano.
— Callum Linington

1
No: truee falsesono primitivi di tipo boolean. Il tipo booleano capital-B è un tipo di wrapper di oggetti per primitive booleane.
— Pointy

@CallumLinington che non funzionerà con gli oggetti creati con il costruttore booleano :)
— Pointy

1
@CallumLinington provare: if (new Boolean(false)) alert("hi");- un oggetto booleano in maiuscolo-B è sempre "veritiero", indipendentemente dal valore booleano piccolo-b sottostante.
— Pointy

Risposte:


506

Ecco a cosa typeofserve. Le parentesi sono opzionali in quanto è un operatore .

if (typeof variable === "boolean"){
  // variable is a boolean
}

7
Non è chiaro cosa sta tentando di fare l'OP, ma gli oggetti booleani maiuscoli-B danno "oggetto" come tipo tramite typeof.
— Pointy

14
1) typeofnon è una funzione. 2) L'uso dell'operatore triplo === con typeofnon è necessario, poiché restituirà sempre una stringa (a proposito, ma per quanto ricordo, c'era un altro caso per alcuni browser molto vecchi). 3) typeofe il confronto delle stringhe è lento. Non usarli. Controlla direttamente con (variable === true || variable === false)(suggerisco di scrivere una funzione).
— StanE

6
non typeof(variable) === typeof(true)sarebbe più robusto?
— Marco Giunio Bruto,

2
@TusharNiras nameè una proprietà di finestra globale con uno speciale getter developer.mozilla.org/en-US/docs/Web/API/Window/name
— Zach Lysobey

1
@MarcusJuniusBrutus @AmitJoki è una sciocchezza, non c'è alcun vantaggio nell'usare più prolissi typeof trueinvece di "boolean". Le nuove versioni di ECMAScript non subiranno mai modifiche sostanziali.
— m93a,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.