Один типичный случай, который я в конечном итоге использую, это при разборе необязательного аргумента. Я думаю, что это делает его более читабельным и более кратким, чтобы синтаксический анализ аргументов не доминировал в теле функции.
/**
* @param {string} [str]
* @param {object} [obj]
* @param {Date} [date]
*/
function f(str, obj, date) {
// handle optional arguments
if (typeof str !== "string") date = obj, obj = str, str = "default";
if (obj instanceof Date) date = obj, obj = {};
if (!(date instanceof Date)) date = new Date();
// ...
}