https://javascript.ru/forum/misc/737...tml#post484870
Согласно пункту 7.2.13 спецификации ECMAScript вычисление происходит так: (пустая строка ToNumber("") согласно 7.1.3 преобразуется в 0)
0 == false // подходит 7-ой пункт -> x == ToNumber(y) -> получаем 0 == 0
0 == 0     // теперь первый пункт -> x === y          -> получаем 0 === 0
0 === 0    // по алгоритму строгого сравнения получаем true
true
"" == false // подходит 7-ой пункт  -> x == ToNumber(y) -> получаем "" == 0
"" == 0     // теперь подходит 5-ый -> ToNumber(x) == y -> получаем 0 == 0
0 == 0      // теперь первый пункт  -> x === y          -> получаем 0 === 0
0 === 0     // по алгоритму строгого сравнения получаем true
true
	
	| Сообщение от AlexanderFilatov | 
	| Читая книгу "Выразительный JavaScript" столкнулся с таким утверждение автора:"Правила преобразования типов в булевы значения говорят, что 0, NaN и "" считаются false, а все остальные true. | 
	
Согласно пункту 7.1.2 ToBoolean(argument) возвращает false тогда, и только тогда, когда argument равен одному из следующего: 
undefined, 
null, 
false, 
+0, 
-0, 
NaN или 
"".