Como posso verificar se o tipo de uma variável é do tipo Booleano?
Quero dizer, existem algumas alternativas, como:
if(jQuery.type(new Boolean()) === jQuery.type(variable))
//Do something..
Mas isso não me parece bonito.
Existe uma maneira mais limpa de conseguir isso?
javascript
jquery
types
Matias Cicero
fonte
fonte
true
oufalse
do tipo booleana?!!( ... some expression ...)
e o resultado será um booleano.true
efalse
são primitivos do tipoboolean
. O tipo Booleano maiúsculo-B é um tipo de invólucro de objeto para primitivas booleanas.if (new Boolean(false)) alert("hi");
- um objeto booleano capital-B é sempre "verdadeiro", independentemente do valor booleano little-b subjacente.Respostas:
É para isso que
typeof
existe. Os parênteses são opcionais, pois é um operador .fonte
typeof
.typeof
não é uma função. 2)typeof
Não é necessário usar o operador triplo === com , pois ele sempre retornará uma string (afaik, mas, tanto quanto me lembro, havia outro caso para alguns navegadores muito antigos). 3)typeof
e as comparações de strings são lentas. Não os use. Verifique diretamente com(variable === true || variable === false)
(sugiro escrever uma função).typeof(variable) === typeof(true)
seria mais robusto?name
é uma propriedade global janela com uma especial getter developer.mozilla.org/en-US/docs/Web/API/Window/nametypeof true
vez de"boolean"
. Novas versões O ECMAScript nunca terá alterações de última hora.Se você deseja apenas verificar um valor primitivo
Se, por algum motivo estranho, você tiver criado booleanos com o construtor, esses objetos não são realmente booleanos, mas objetos que contêm um valor booleano primitivo, e uma maneira de verificar os booleanos primitivos e os objetos criados com isso
new Boolean
é:Mostrar snippet de código
fonte
new Boolean()
, que tecnicamente não é booleana, mas um objeto, mas ainda é válida. um valor booleano.new Boolean()
retorna um objeto (veja os comentários na pergunta). Mas qualquer que seja :)typeof variable === typeof new Boolean()
e provavelmente quer apenas uma verificação regular do tipo, mas de alguma forma foi pego em alguma sintaxe estranha do jQuery.bool
parâmetro passado na eranull
otypeof bool === 'object'
faria ainda avaliar e umaTypeError: Cannot read property 'valueOf' of null
exceção seria lançada na chamada paratypeof bool.valueOf()
. Assim, eu mudaria a última linha para ler:(typeof bool === 'object' && bool && typeof bool.valueOf() === 'boolean');
que avaliará apenas quando nãobool
for nulo.Com JavaScript puro , você pode simplesmente usar
typeof
e fazer algo comotypeof false
outypeof true
e ele retornará"boolean"
...Mas essa não é a única maneira de fazer isso, estou criando funções abaixo para mostrar maneiras diferentes de verificar booleanos em JavaScript, também maneiras diferentes de fazê-lo em alguns novos frameworks, vamos começar com este:
Ou caminho ES6 de uma linha ...
e chame assim!
Também no código-fonte de sublinhado , eles verificam assim (com o _. No início do nome da função):
Também no jQuery, você pode verificar assim:
Em React , se você estiver usando propTypes, poderá verificar um valor para ser booleano assim:
Se você estiver usando o TypeScript , também poderá usar o tipo booleano :
Outra maneira de fazer isso é como converter o valor em booleano e verificar se ainda é exatamente o mesmo, algo como:
ou como:
e chame!
Não é recomendável usar nenhuma estrutura para isso, pois é realmente uma verificação simples no JavaScript.
fonte
new Boolean(true) === new Boolean(true)
deve retornar false (como as referências são diferentes). É por isso que oisBoolean(new Boolean(true))
dirá falso, enquanto deve ser verdadeiro (new Boolean(true)
é do tipo booleano ).Existem três maneiras "baunilha" de verificar isso com ou sem o jQuery.
Primeiro é forçar a avaliação booleana por coerção e, em seguida, verifique se é igual ao valor original:
Fazendo uma
typeof
verificação simples :Fazendo um exagero completamente e instanciação desnecessária de um wrapper de classe em um primitivo:
O terceiro retornará apenas
true
se você criar umnew Boolean
classe e passar essa informação.Para elaborar a coerção das primitivas (como mostrado no # 1), todos os tipos de primitivas podem ser verificados desta maneira:
Boolean
:Number
:String
:fonte
typeof
? Eu duvido muito.typeof
também é uma coerção, mas otypeof
método faz alguns getters e comparações dentro de uma comparação no final. Aqui está a referência da V8 paratypeof
!!
é mais rápido, diz-se queBoolean
é mais rápido. Apenas uma referência ao tamanho do delta entre os testes. As verificações booleanas são rápidas. jsperf.com/bool-not-not jsperf.com/bool-vs-doublenottypeof val === "boolean"
são ótimos.Você pode usar Javascript puro para conseguir isso:
fonte
Se você deseja que sua função também possa validar objetos booleanos, a solução mais eficiente deve ser:
fonte
A maneira mais confiável de verificar o tipo de uma variável no JavaScript é a seguinte :
A razão para essa complicação é que
typeof true
retorna"boolean"
enquantotypeof new Boolean(true)
retorna"object"
.fonte
"boolean"
se o valor realmente é um objeto? Isso não parece muito prático para mim. Objetos booleanos devem ser tratados de maneira diferente das primitivas booleanas de qualquer maneira.Eu iria com o Lodash: isBoolean verifica se a variável passada é um objeto booleano primitivo ou wrapper booleano e, portanto, é responsável por todos os casos.
fonte
Você pode criar uma função que verifique se
typeof
há um argumento.fonte
Às vezes, precisamos de uma única maneira de verificar isso. typeof não funciona para a data etc. Então eu facilitei
Também para
Number
,String
,Boolean
etc., muitas vezes, precisa verificar o tipo em um único caminho ...fonte
A criação de funções como a
isBoolean
que contém onelinertypeof v === "boolean"
parece muito impraticável a longo prazo. Estou surpreso que quase todo mundo sugira criar sua própria função. Parece ser o mesmo câncer que a extensão de protótipos nativos.apenas memorize
typeof v === "boolean"
e é tudo. Adicione um modelo ao seu IDE para poder colocá-lo com um atalho de três letras e ser feliz.fonte
v === true || v === false
, que faz 2 verificações no caso defalse
. Classificação: (1 - ambos praticamente iguais)typeof v === 'boolean
etypeof v === typeof true
, (2)isBoolean(v)
, (3)v === true || v === false
.se você tem uma string
fonte
val === false || val === true
.typeof variable == typeof true
.O mais curto, mas não legível:
!!val === val
.Explicação:
Testes:
fonte
No nodejs usando o node-boolify , podemos usar isBoolean ();
fonte
Mais uma decisão com a função de seta es2015
fonte