Просматривая исходный код одного из наших проектов, я нашел несколько мест, где мы используем три восклицательных знака в условных выражениях, например:
if (!!!someVar) {
// ...
}
Теперь я понимаю, что это не какой-то редко используемый оператор, это всего три отрицания подряд, например !(!(!someVar)))
. Я не понимаю, как его использовать - на мой взгляд, его можно безопасно заменить единым восклицательным знаком. Ниже приводятся мои попытки найти случай, когда !!!a
не равно !a
(взято прямо с консоли Google Chrome):
var a = ''
""
!!!a === !a
true
a = 'string'
"string"
!!!a === !a
true
a = null
null
!!!a === !a
true
a = 12
12
!!!a === !a
true
a = {b: 1}
Object {b: 1}
!!!a.c === !a.c // a.c is undefined here
true
a = []
[]
!!!a === !a
true
a = [1,2]
[1, 2]
!!!a === !a
true
Я пропустил какой-то редкий (или очевидный) случай?