Ответ 1
!
- логическое отрицание или оператор "не". !!
- !
дважды. Это способ присвоить значение "правдивое" или "ложное" значение true
или false
, соответственно. Учитывая логическое значение, !
будет отрицать значение, т.е. !true
дает false
и наоборот. При задании чего-то другого, кроме логического, значение сначала будет преобразовано в логическое, а затем отменено. Например, !undefined
сначала преобразует undefined
в false
, а затем сбрасывает его, получая true
. Применение второго оператора !
(!!undefined
) дает false
, поэтому в действии !!undefined
преобразуется undefined
в false
.
В JavaScript значения false
, null
, undefined
, 0
, -0
, NaN
и ''
(пустая строка) являются значениями "ложных". Все остальные значения являются "правдивыми". (1): 7.1.2 Здесь таблица истинности !
и !!
применяется к различным значениям:
value | !value | !!value
-----------+--------+-------
false | true | false
true | false | true
null | true | false
undefined | true | false
0 | true | false
-0 | true | false
1 | false | true
-5 | false | true
NaN | true | false
'' | true | false
'hello' | false | true