Мы не знаем некоторых вещей о том, как оператор !
работает в Javascript.
Основы
!
- это логический оператор, который преобразует значение в противоположное ему логическое. Поскольку JavaScript будет приводить значения, он преобразует значение в его правдивую / ложную форму и вернет противоположное логическое значение.
Когда мы выполняем операцию !
с числом, отличным от 0, она возвращает false
. Это потому, что все числа, кроме 0, верны.
// evaluates to false !1 !-10 !1.2
Операция !
на 0, null, undefined, NaN
возвращает true
, поскольку они ложны.
//evaluates to true !0 !NaN !null !undefined
Если мы выполним !
для undefined
переменных, он вернет true
.
var a ; !a // true
Точно так же, если мы выполняем !
для переменной, которая имеет какое-то значение или указывает на некоторую ссылку, она возвращает false
.
var a = []; !a; // false
Странная часть
Когда мы делаем:
! + [] // then it is evaluated to true
Причина в том, что оператор +
работает только со строками и числами, поэтому, если мы выполняем двоичную операцию с массивом, то массив преобразуется в строку. Итак, подробный вид:
! + [] is converted internally into ! + String([]) ! + "" //it evaluates true because ! on empty string returns true
Итак, теперь давайте попробуем другую большую проблему (которую я нашел в Твиттере, решение также доступно там 😃)
(! + [] + [] + [] + ![]) ! + [] --> true true + [] --> "true" "true" +[] --> "true" "true" + ![] -- >"truefalse"
Если вы хотите узнать больше об этих концепциях, вам следует изучить приведение типов в JavaScript и то, как истинные / ложные значения работают в JS.
Если вы найдете этот полезный сюрприз, то я здесь.
Поделитесь, если вы счастливы.
Следуйте Javascript Jeep🚙, если чувствуете себя достойным.