①ECMAScriptという言葉を初めてみた時、自分の知らない言語の名前が出来たというふうに思いました。ですが、javascriptの標準規格ということは、僕がドットインストールで学んだjavascriptはECMAScriptという種類のものだったということなのでしょうか?
これだけの情報では、どちらとも言えません。
例えばドットインストールではChromeのデベロッパーツールで動かしてみましょう…みたいに限定していませんでしか?
もしそうならば、Chromeに搭載されているJavaScriptの事を指しているはずです。
ChromeのJavaScriptはECMAScriptという仕様を厳密に守っている挙動をするので、
ほぼそのコードを他のブラウザに持っていっても大丈夫です。
という訳で仕様に限りなく近い挙動を学習出来ていると考えて差し支えありません。
詳しくは3でまとめて解説します。
②Javascriptの標準規格という言葉を裏返すと、javascriptのはいくつか種類があるということでしょうか?
その通りです。
ベンダー毎にJavaScriptの実装(エンジン)は異なりますし、
同じFirefoxというブラウザ一つをとっても、実行速度を改善する為に何度もエンジンを作り直しています。
Chromeなんかも同じV8エンジンですが、細かいバージョンアップを繰り返しているので内部ロジックはコロコロ変わっているはずです。
つまりブラウザの数 * ブラウザのバージョン番号
の数だけエンジンの実装が存在します。
ただしオープンソースで提供されているV8エンジンを流用しているブラウザなんてのもありますので、
全てが全て自前の独自仕様というわけではありません。
③仕様という言葉の意味について
歴史に知っておいた方が理解が捗ると思いますので解説していきます。
そもそもJavaScriptのエンジンは、
Javaのように誰かが作ったものを全世界で使っているわけではありません。
ブラウザ作ってるベンダーは自前のエンジンを用意して、
他のブラウザに対するアピールポイントとして利用しています。
質問文で気にされているポイントにフォーカスするならば、
全てのブラウザは自前で用意したエンジンで実行するので同じ動作をする保証はありません。
同じ動作しないってマジかよ…
ここで大昔のIEとネットスケープ(Firefoxの前身)の二大ブラウザがシェアを争っていた1990年代にさかのぼります。
当時はJavaScriptの統一仕様というものはなかったので、
「俺のブラウザのJavaScriptにはこんな機能や関数があるんだぜ」
「なんの!こっちのJavaScriptにはあんな機能が搭載されているんだ!」
……と独自仕様を盛り込みまくる事で自社のブラウザの優位性を語っていました。
でも、ちょっと待てよ。
AのブラウザでしかJavaScriptのコードが動作しないって、Webサイトの閲覧者相当困らないか?
…となるわけですね。
結果としてWebサイトは動作しない独自仕様だらけになってしまいました。
なので当時は「閲覧者が困るので共通部分しか使わない!JavaScriptの実行とかもってのほか」
…という防御的な姿勢が一般的であり、殆どのWebサイトを公開する企業はJavaScriptを利用していませんでした。
そこで、ECMAという団体がECMAScriptという統一規格の仕様を作成し、
ブラウザ作ってる団体に「俺の作った仕様で動作するように従いなさい」と勧告するに至ります。
例えばfalse == null
を比較した結果はfalse
になりますよという事が明記されてますし、
Arrayという配列型はこういうメソッドを所持して、こんな挙動をして下さいねみたいなことまで事細かに記載されています。
ECMAScriptの仕様通りに動作しないJavaScriptのエンジンは、
勧告に従って作られてない欠陥品として世のエンジニアやユーザーから見放されることになります。
この流れに世界中のブラウザのベンダーが合意し、全世界共通になっていきました。
1990年代後半に作られたECMAScriptは少しずつ浸透し、
今日では有名所のブラウザのほぼ全てのJavaScriptエンジンはECMAScriptに準拠しています。
新しいバージョンのES6以降に関しては仕様が新しすぎるので、
IE11等の古いブラウザでは準拠しきれてないものもありますが、
ES5までならJavaScriptが動作すると謳っているブラウザはほぼ完璧に対応しています。
この辺の歴史を考慮に入れて考えると、
- ECMAScript: ECMAが作った仕様
- JavaScript: ブラウザ作ってる団体が実装したエンジン
こういう違いがあります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/30 07:52