JS のそれは相当アドホックで、 C# とかで例えるなら
void Hoge(object[] args) {
if (args.Length > 1) ....
if (args[2] is Fuga) ....
}
みたいなことをやっていて非常によろしくないと思っています
もっとひどいのは
foo(foo, bar, fuga)
foo(foo, fuga)
foo(fuga, hoge, piyo, hogera)
みたいなオーバーロードをこれで実現しようとして一番下のシグネチャで実装するので foo のつもりで渡すオブジェクトを fuga に渡さないといけないみたいな不調和が発生する