Ответ 1
Оператор !
отрицает, а вторичный !
отрицает результат неотрицательного отрицания. Это в основном выводит все, что находится справа, в логическое (true или false).
!false // true
!!false // false
Итак, если метод определен, то function
, который является правдивым, будет введен в true
.
document.createElement('video').canPlayType
Таким образом, приведенное выше возвращает функцию. Нам не нужна функция, мы хотим явное логическое, поэтому мы отрицаем ее дважды, и поскольку function
не является ложным (0, null, false, empty string, NaN), тогда он возвращает true для браузеров, которые поддерживают этот метод.
!!document.createElement('video').canPlayType // true
Если метод не поддерживается, браузер вернет undefined
. !undefined
истинно, а !true
- false, поэтому !!document.createElement('video').LOL
вернет false