Усы похожие, даже идентичные. Но по смыслу ничего общего.
Литерал объекта это
выражение, значение которого как-то используется, куда-то передаётся.
А блок инструкций сам по себе или со всякими
do {} while ()
и
if (condition) {}
В общем, вроде бы, различия однозначны и коллизий не возникает:
function foo() {}; // пустой блок
foo({}); // передали пустой объект аргументом
{} // пустой блок инструкций
({}) // отдельно висящий никому не нужный пустой объект
[{}] // создали массив с пустым объектом
{[]} // внутри блока создали пустой массив и забыли про него
«Умные» редакторы кода подсвечивают усы разными цветами и ругаются на бессмысленность
бытия пустых блоков и неиспользуемых выражений.