Пояснение
Сначала интерпретатор разбирает true + true. Это не строки, значит это только сложение, в математических операциях true и false автоматически становятся в 1 и 0. Если сложить true + true, то получится 2.
Оператор + используется и для сложения и для конкатенации. Если один из операндов является строкой, то интерпретатор всегда выберет конкатенацию, а не сложение. 2 + '0' = '20'.
typeof NaN возвращает строку 'number' (эту особенность рекомендую просто запомнить). Длина 'number' - 6 символов.
В итоге получается, что слева строка '20', а справа число 6, а между ними оператор минус. Минус - это только математический оператор, поэтому интерпретатор видит, что слева операнд не number, и автоматически преобразует его в number.