1

Negação com !!, não entendi foi nada =[

#JavaScript
Gustavo Santos
Gustavo Santos

Estou estudando JavaScript e me deparei com a utilização de dois pontos de exclamação, mas confesso que não entendi a lógica para utilização deles.

 

Uma negação até faz sentido pra mim, mas duas... Eu não consigo ver a aplicação destes em alguma função ou qualquer outro lugar. Tipo:


const isAtivo = true
console.log(!!isAtivo)


Define o identificador e é atribuído à ele o valor verdadeiro, daí no console vira falso depois verdadeiro de novo. Qual o sentido disso? Se ele é verdadeiro, pra que trocar pra ter certeza de que realmente é verdadeiro? O mesmo pergunto se for falso.

 

Compreendo que há as formas para identificar o que pode ser verdadeiro e falso...


console.log('Os verdadeiros...')
console.log(!!3)
console.log(!!-1)
console.log(!!' ')
console.log(!![])
console.log(!!{})
console.log(!!Infinity)
console.log(!!(isAtivo = true))

console.log('Os falsos...')
console.log(!!0)
console.log(!!'')
console.log(!!null)
console.log(!!NaN)
console.log(!!undefined)
console.log(!!(isAtivo = false))


Isso é muito confuso pra mim. Já vi alguns códigos de colegas, mas não entendi foi nada, fiquei mais perdido que cego em tiroteio.

4
163

Comentários (4)

0
G

Gabriel

06/02/2021 19:24

Acredito que isso seja usado onde o retorno precisa ser explicitamente booleano, um bom exemplo é o código:

-----------------------------------------------

var teste = 'a'


if(teste == true){

 console.log(teste)

}


if(!!teste == true){

 console.log(!!teste)

}

-----------------------------------------------

O sinal ! é um negador, ele inverte o sinal lógico, isso significa que você pode negar uma negação e voltar ao seu sinal de origem, você pode testar tbm um

console.log(!!!!!!!!!!1)

que é a negação da negação da negação... No exemplo que eu mostrei a variável 'teste' tem o caractere 'a', isso em toria é verdadeiro, tanto que se você negar ele com "!teste" você obtem um false, mas na prática caso você precise do booleano você terá que "converter" ele transformando em false e depois em true de novo. Acredito que os exemplos sejam apenas para entender o conceito do operador NOT, não são feitos para terem muito sentido na prática, assim como o console.log(!!!!!!!!!!1) que eu mostrei

2
Carlos Rocha

Carlos Rocha

06/02/2021 18:58

Bom o símbolo: ! não é um comparador, é um operador, e o resultado da operação é o valor lógico invertido da variável que está à direita dele.

se você usar: !! seria como usar: !(!variavelBooleana) ou seja você inverte o valor de variavelBooleana e inverte novamente, de modo que o resultado da expressão é o valor original de variavelBooleana


Agora o porque de utilizarem desta forma já fica a cargo de cada programador eu acho.

Talvez tenha a ver com o fato de quando faz uso de um ! o resultado é um valor booleano obrigatoriamente pois o javascript vai fazer um cast para retornar true ou false...



2
Leonardo Alves

Leonardo Alves

06/02/2021 18:54

A dupla negação é pra você conseguir ter certeza em transformar o tipo em boolean sem precisar de um casting, se quiser uma explicação melhor entra aqui no site do stackoverflow - https://pt.stackoverflow.com/questions/29014/qual-o-sentido-de-usar-dupla-negação-em-javascript#:~:text=é%20uma%20forma%20de%20forçar,para%20o%20objetivo%20em%20questão.

0
⚡Eros Lima

⚡Eros Lima

06/02/2021 18:49

Se usa uma exclamação só como negação (!=0) se não for 0 então verdadeiro.

E para duas


Essa é uma maneira rápida de converter o resultado de uma expressão para um valor booleano True/False (ou em termos técnicos, oferecendo garantia de typecast para boolean), simplificando assim processos de avaliação condicional.


O primeiro sinal ! avalia a expressão, convertendo o valor lógico e negando-o.
O segundo sinal ! inverte o valor do primeiro.
Na documentação, a respeito do operador lógico NOT:
Retorna false caso seu operador único pode ser convertido para true; caso contrário, retorna true.
Os seguintes valores são avaliados como "falso":
  • false
  • NaN
  • undefined
  • null
  • "" (empty string)
  • 0

Amante de cães, campismo, e dentre muitos sonhos que possui, almeja viajar de carro adaptado para motorcasa a fim de conhecer toda a América do Sul.

Brasil