{}[true] is [true] and ![true] should be false.
So why does !{}[true] evaluate to true
The answers here are good, here's a breakdown in pseudo-code:
{}['whatever'] = empty block, NewArray('whatever') = NewArray('whatever'){}[true] = empty block, NewArray(true) = NewArray(true)!{}['whatever'] = LogicalNOT(convertToBool(NewObject.whatever)) = LogicalNOT(convertToBool(undefined)) = LogicalNOT(false) = true({}['whatever']) = Grouping(NewObject.whatever) = Grouping(undefined) = undefined