なぜJavascriptはわかりにくいのか

http://d.hatena.ne.jp/mindcat/20091004/1254653934

ネット上にこんな記事があり、この記事はとても人気でわかりやすくて良いけど、**こういう記事が人気になる時点で「Javascriptはわかりづらい」**という意味にもなっていると思った。

では、なぜわかりにくいと思われるのか?個人的に考えた。

クラスがない(のに、newはある)

JavaScriptの最大の特徴が、これでしょう。new演算子があるおかげで、あたかも Class があるように見えはしますが、JavaScript においては、オブジェクトは「Class に属する」のではなく「プロトタイプ・オブジェクトという親から生み出される」のです。

JavaScriptのnewって本当にいらない子?http://taiju.hatenablog.com/entry/20090706/1246840565

ES2015でclass構文が入ったが、

内部的にはプロトタイプベースの上でクラスの振る舞いと等価となるようなコードに変換されます。

春からはじめるモダンJavaScript / ES2015
http://qiita.com/mizchi/items/3bbb3f466a3b5011b509

とのこと。

プロトタイプチェーン

他の有名な言語には見られない特徴なので、他の言語のクラスに馴染んでいると「???」となりやすい

undefined という存在

エラーになってほしい場所でundefinedが返されてそのまま処理が続行されるの、ひどい

以下の記事でも「くせ者」って書かれているし、nullだけでなくundefinedまであると場合分けなども面倒になっちゃう。

JavaScriptのundefinedというクセ者のいろいろ
http://d.hatena.ne.jp/mindcat/20100512/1273683917

配列と連想配列の違い

以下の記事がくわしい

JavaScript の配列と連想配列の違い
http://d.hatena.ne.jp/amachang/20070202/1170386546

という違いを理解しないまま使うと罠にはまる可能性がある。自分も最初ははまりました。

他の言語だと List と Dictionary のように区別されているところを Object というあまりに抽象的な表現にされているところも個人的に好きじゃない。

this の扱い

よく var self = this; みたいなことを書いてしまうよくある問題。

ES2015では => を使えば解決。これは気にしなくて良くなる

日付・日時の扱い

標準のライブラリだと日時を扱うのが非常にやりづらい。

moment.jsとか使えば楽になるらしいけど、、標準ライブラリが使いづらいのは悲しい

JavaScript の Date は罠が多すぎる
http://qiita.com/labocho/items/5fbaa0491b67221419b4

モジュール管理(別ファイルの読み込み)

ブラウザ+ES5の時代では言語仕様に他ファイルの読み込み文法が存在せず