Both constructs (catch () being a syntax error, as sh4nx0r rightfully pointed out) behave the same in C#. The fact that both are allowed is probably something the language inherited from C++ syntax. , can throw objects that do not derive from System.Exception. In these languages, catch will handle those non-CLS exceptions, but catch (Exception) won't.
will catch all C++ exceptions, but it should be considered bad design. You can use c++11's new std::current_exception mechanism, but if you don't have the ability to use c++11 (legacy code systems requiring a rewrite), then you have no named exception pointer to use to get a message or name. You may want to add separate catch clauses for the various exceptions you can catch, and only catch ...
In the second scheme, if the promise p rejects, then the .catch() handler is called. If you return a normal value or a promise that eventually resolves from the .catch() handler (thus "handling" the error), then the promise chain switches to the resolved state and the .then() handler after the .catch() will be called. So that's difference #2.
Variety on MSN: 'Deadliest Catch' return date, how it will address Todd Meadows' death
Discovery Channel has set the premiere date for Season 22 of its hit franchise “Deadliest Catch,” and has shared further information on how the show will address the death of rookie crew member Todd ...
AOL: How “Deadliest Catch” Will Address Todd Meadows' Shocking Death as New Season Sets Premiere Date
How “Deadliest Catch” Will Address Todd Meadows' Shocking Death as New Season Sets Premiere Date
Yahoo: 'Deadliest Catch' Will Pay Tribute to Late Deckhand Todd Meadows in New Season