0

Есть такой код:

const a = 4;

if(!!a){
  console.log("not not"); 
}
if(a){
  console.log("truish");
} 

Выведет с начало not not потом truish.

Какая разница между двумя этими подходами ?

Этот вопрос не про то как работает оператор !! (или not not) а какая разница между двумя этими подходами наверху.

Randall
  • 7,054
  • 2
    В данном конкретном примере - ни в чём. – andreymal Aug 19 '19 at 08:36
  • Мне кажется, что такие вопросы на SO уже были. – nick_n_a Aug 19 '19 at 09:07
  • 1
    вот http://ru.stackoverflow.com/questions/188946/%d0%94%d0%b2%d0%be%d0%b9%d0%bd%d0%be%d0%b5-%d0%be%d1%82%d1%80%d0%b8%d1%86%d0%b0%d0%bd%d0%b8%d0%b5 – nick_n_a Aug 19 '19 at 09:09
  • @0xdb какой еще дубликат я разницу спрашиваю а не то как работает этот оператор – Randall Aug 19 '19 at 10:05
  • @nick_n_a ссылка в студию где говорится про разницы данного оператора с простым if-ом – Randall Aug 19 '19 at 10:06
  • Так это и есть суть того, как он (оператор) работает. – nick_n_a Aug 19 '19 at 10:09
  • @nick_n_a что есть ?я не понял – Randall Aug 19 '19 at 10:10
  • Я же не спрашиваю как работает функция FileExists(filename), я спрашиваю разницу между Print(filename) и FileExists(filename). Вот так я вижу ваш вопрос. – nick_n_a Aug 19 '19 at 10:11

1 Answers1

9

!! - преобразует выражение (переменную) в логический тип явно, то есть в вашем примере

console.log(a) //4
console.log(!!a) //true

с точки зрения вашего примера особо разницы нет. Но если написать:

if(a === true) //так не сработает
if(!!a === true) //так сработает

фактически !!a === Boolean(a)


интересная особенность

'0' == 0 // true
!!'0' == !!0 // false
Andrey Chukhray
  • 168
  • 1
  • 6