Парадокс в JavaScript с точки зрения PHP-кодера
JavaScript Garden: Равенство и сравнение

Слабая типизированность языка JavaScript подразумевает приведение обеих переменных к одному типу для того, чтобы произвести сравнение.

console.log(2 == true); // false. int boolean
console.log(!!2 == true); // true. boolean boolean
console.log(2 ? true : false); // true. boolean

а это не жаваскрипт, это почти везде так.
перед знаком вопроса находится выражение, которое проверяется на истинность. 
в случае если вместо 2, будет 0 — результат будет более другим.