回答編集履歴
2
校生
    
        answer	
    CHANGED
    
    | @@ -15,46 +15,60 @@ | |
| 15 15 |  | 
| 16 16 | 
             
            その通りです。
         | 
| 17 17 |  | 
| 18 | 
            -
             | 
| 18 | 
            +
            ベンダー毎にJavaScriptの実装(エンジン)は異なりますし、
         | 
| 19 | 
            -
             | 
| 19 | 
            +
            同じFirefoxというブラウザ一つをとっても、実行速度を改善する為に何度もエンジンを作り直しています。
         | 
| 20 | 
            -
            Chromeなんかも同じV8エンジンですが | 
| 20 | 
            +
            Chromeなんかも同じV8エンジンですが、細かいバージョンアップを繰り返しているので内部ロジックはコロコロ変わっているはずです。
         | 
| 21 21 |  | 
| 22 | 
            +
            つまり`ブラウザの数 * ブラウザのバージョン番号`の数だけエンジンの実装が存在します。
         | 
| 23 | 
            +
            ただしオープンソースで提供されているV8エンジンを流用しているブラウザなんてのもありますので、
         | 
| 24 | 
            +
            全てが全て自前の独自仕様というわけではありません。
         | 
| 25 | 
            +
             | 
| 22 26 | 
             
            > ③仕様という言葉の意味について
         | 
| 23 27 |  | 
| 24 | 
            -
             | 
| 28 | 
            +
            歴史に知っておいた方が理解が捗ると思いますので解説していきます。
         | 
| 25 | 
            -
            FirefoxやIE、Edgeなどなど…他のブラウザはV8エンジンではなく自作のエンジンでJavaScriptコードを動作させています。
         | 
| 26 | 
            -
            つまり、全てのブラウザは独自のJavaScriptエンジンを積んでいるので**同じ動作をする保証**はありません。
         | 
| 27 29 |  | 
| 30 | 
            +
            そもそもJavaScriptのエンジンは、
         | 
| 31 | 
            +
            Javaのように誰かが作ったものを全世界で使っているわけではありません。
         | 
| 32 | 
            +
            ブラウザ作ってるベンダーは自前のエンジンを用意して、
         | 
| 33 | 
            +
            他のブラウザに対するアピールポイントとして利用しています。
         | 
| 34 | 
            +
             | 
| 35 | 
            +
            質問文で気にされているポイントにフォーカスするならば、
         | 
| 36 | 
            +
            全てのブラウザは自前で用意したエンジンで実行するので**同じ動作をする保証**はありません。
         | 
| 37 | 
            +
             | 
| 28 38 | 
             
            同じ動作しないってマジかよ…
         | 
| 29 | 
            -
            こ | 
| 39 | 
            +
            ここで大昔のIEとネットスケープ(Firefoxの前身)の二大ブラウザがシェアを争っていた1990年代にさかのぼります。
         | 
| 30 40 | 
             
            当時はJavaScriptの統一仕様というものはなかったので、
         | 
| 31 41 | 
             
            「俺のブラウザのJavaScriptにはこんな機能や関数があるんだぜ」
         | 
| 32 42 | 
             
            「なんの!こっちのJavaScriptにはあんな機能が搭載されているんだ!」
         | 
| 33 43 | 
             
            ……と独自仕様を盛り込みまくる事で自社のブラウザの優位性を語っていました。
         | 
| 34 44 |  | 
| 35 45 | 
             
            でも、ちょっと待てよ。
         | 
| 36 | 
            -
            AのブラウザでしかJavaScriptのコードが動作しないって、Webサイトの閲覧者相当困らないか? | 
| 46 | 
            +
            AのブラウザでしかJavaScriptのコードが動作しないって、Webサイトの閲覧者相当困らないか?
         | 
| 37 47 | 
             
            …となるわけですね。
         | 
| 38 48 |  | 
| 39 | 
            -
            1990年代のWebサイトはこのブラウザの独自仕様で
         | 
| 40 | 
            -
            HTMLのタグもJavaScriptの挙動も統一されておらず、
         | 
| 41 | 
            -
            Webサイト | 
| 49 | 
            +
            結果としてWebサイトは動作しない独自仕様だらけになってしまいました。
         | 
| 50 | 
            +
            なので当時は「閲覧者が困るので共通部分しか使わない!JavaScriptの実行とかもってのほか」
         | 
| 51 | 
            +
            …という防御的な姿勢が一般的であり、殆どのWebサイトを公開する企業はJavaScriptを利用していませんでした。
         | 
| 42 52 |  | 
| 43 53 | 
             
            そこで、ECMAという団体がECMAScriptという統一規格の仕様を作成し、
         | 
| 44 | 
            -
            ブラウザ作ってる団体に「俺の作った仕様で動作するように従いなさい」と勧告 | 
| 54 | 
            +
            ブラウザ作ってる団体に「俺の作った仕様で動作するように従いなさい」と勧告するに至ります。
         | 
| 45 55 |  | 
| 46 56 | 
             
            例えば`false == null`を比較した結果は`false`になりますよという事が明記されてますし、
         | 
| 47 57 | 
             
            Arrayという配列型はこういうメソッドを所持して、こんな挙動をして下さいねみたいなことまで事細かに記載されています。
         | 
| 48 58 | 
             
            ECMAScriptの仕様通りに動作しないJavaScriptのエンジンは、
         | 
| 49 59 | 
             
            勧告に従って作られてない欠陥品として世のエンジニアやユーザーから見放されることになります。
         | 
| 50 60 |  | 
| 61 | 
            +
            この流れに世界中のブラウザのベンダーが合意し、全世界共通になっていきました。
         | 
| 62 | 
            +
            1990年代後半に作られたECMAScriptは少しずつ浸透し、
         | 
| 63 | 
            +
            今日では有名所のブラウザのほぼ全てのJavaScriptエンジンはECMAScriptに準拠しています。
         | 
| 64 | 
            +
             | 
| 65 | 
            +
            新しいバージョンのES6以降に関しては仕様が新しすぎるので、
         | 
| 66 | 
            +
            IE11等の古いブラウザでは準拠しきれてないものもありますが、
         | 
| 67 | 
            +
            ES5までならJavaScriptが動作すると謳っているブラウザはほぼ完璧に対応しています。
         | 
| 68 | 
            +
             | 
| 51 69 | 
             
            この辺の歴史を考慮に入れて考えると、
         | 
| 52 70 |  | 
| 53 71 | 
             
            - ECMAScript: ECMAが作った仕様
         | 
| 54 72 | 
             
            - JavaScript: ブラウザ作ってる団体が実装したエンジン
         | 
| 55 73 |  | 
| 56 | 
            -
            こういう違いがあります。
         | 
| 74 | 
            +
            こういう違いがあります。
         | 
| 57 | 
            -
             | 
| 58 | 
            -
            今日では有名所のブラウザはほぼ全てECMAScriptに準拠しています。
         | 
| 59 | 
            -
            新しいバージョンのES6以降…に関しては仕様が新しすぎるので、古いブラウザでは準拠しきれてないものもありますが、
         | 
| 60 | 
            -
            ES5までならJavaScriptが動作すると謳っているブラウザはほぼ完璧に対応しています。
         | 
1
ちょっと段落を編集
    
        answer	
    CHANGED
    
    | @@ -1,49 +1,60 @@ | |
| 1 1 | 
             
            > ①ECMAScriptという言葉を初めてみた時、自分の知らない言語の名前が出来たというふうに思いました。ですが、javascriptの標準規格ということは、僕がドットインストールで学んだjavascriptはECMAScriptという種類のものだったということなのでしょうか?
         | 
| 2 2 |  | 
| 3 | 
            -
            これ | 
| 3 | 
            +
            これだけの情報では、どちらとも言えません。
         | 
| 4 4 |  | 
| 5 | 
            +
            例えばドットインストールではChromeのデベロッパーツールで動かしてみましょう…みたいに限定していませんでしか?
         | 
| 6 | 
            +
            もしそうならば、Chromeに搭載されているJavaScriptの事を指しているはずです。
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            ChromeのJavaScriptはECMAScriptという仕様を厳密に守っている挙動をするので、
         | 
| 9 | 
            +
            ほぼそのコードを他のブラウザに持っていっても大丈夫です。
         | 
| 10 | 
            +
            という訳で仕様に限りなく近い挙動を学習出来ていると考えて差し支えありません。
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            詳しくは3でまとめて解説します。
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            > ②Javascriptの標準規格という言葉を裏返すと、javascriptのはいくつか種類があるということでしょうか?
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            その通りです。
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            同じFirefoxというブラウザ一つをとっても、
         | 
| 19 | 
            +
            JavaScriptの実行速度を改善する為に何度もJavaScriptエンジンを作り直しています。
         | 
| 20 | 
            +
            Chromeなんかも同じV8エンジンですが中身はコロコロ変わっているはずです。
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            > ③仕様という言葉の意味について
         | 
| 23 | 
            +
             | 
| 5 | 
            -
             | 
| 24 | 
            +
            JavaScriptのエンジン部分はChromeが搭載しているV8エンジンが有名ですが、
         | 
| 6 25 | 
             
            FirefoxやIE、Edgeなどなど…他のブラウザはV8エンジンではなく自作のエンジンでJavaScriptコードを動作させています。
         | 
| 7 26 | 
             
            つまり、全てのブラウザは独自のJavaScriptエンジンを積んでいるので**同じ動作をする保証**はありません。
         | 
| 8 27 |  | 
| 9 28 | 
             
            同じ動作しないってマジかよ…
         | 
| 10 29 | 
             
            これは大昔のIEとネットスケープ(Firefoxの前身)の二大ブラウザがシェアを争っていた1990年代にさかのぼります。
         | 
| 30 | 
            +
            当時はJavaScriptの統一仕様というものはなかったので、
         | 
| 31 | 
            +
            「俺のブラウザのJavaScriptにはこんな機能や関数があるんだぜ」
         | 
| 11 | 
            -
             | 
| 32 | 
            +
            「なんの!こっちのJavaScriptにはあんな機能が搭載されているんだ!」
         | 
| 33 | 
            +
            ……と独自仕様を盛り込みまくる事で自社のブラウザの優位性を語っていました。
         | 
| 12 34 |  | 
| 13 | 
            -
             | 
| 35 | 
            +
            でも、ちょっと待てよ。
         | 
| 14 | 
            -
            AのブラウザでしかJavaScriptが動作しないって、Webサイトの閲覧者相当困らないか???
         | 
| 36 | 
            +
            AのブラウザでしかJavaScriptのコードが動作しないって、Webサイトの閲覧者相当困らないか???
         | 
| 15 | 
            -
             | 
| 37 | 
            +
            …となるわけですね。
         | 
| 16 | 
            -
            HTMLのタグもJavaScriptの挙動も統一されておらず、開発者は動作する事を保証出来ないので途方にくれていました。
         | 
| 17 38 |  | 
| 39 | 
            +
            1990年代のWebサイトはこのブラウザの独自仕様で
         | 
| 40 | 
            +
            HTMLのタグもJavaScriptの挙動も統一されておらず、
         | 
| 41 | 
            +
            Webサイトの担当者達は動作する事がそもそも保証出来ないので途方にくれていました。
         | 
| 42 | 
            +
             | 
| 18 43 | 
             
            そこで、ECMAという団体がECMAScriptという統一規格の仕様を作成し、
         | 
| 19 | 
            -
            ブラウザに「俺の作った仕様で動作するように従いなさい」と勧告します。
         | 
| 44 | 
            +
            ブラウザ作ってる団体に「俺の作った仕様で動作するように従いなさい」と勧告します。
         | 
| 20 45 |  | 
| 21 | 
            -
            例えば`false == null`を比較した結果は`false`になりますよ | 
| 46 | 
            +
            例えば`false == null`を比較した結果は`false`になりますよという事が明記されてますし、
         | 
| 22 47 | 
             
            Arrayという配列型はこういうメソッドを所持して、こんな挙動をして下さいねみたいなことまで事細かに記載されています。
         | 
| 23 48 | 
             
            ECMAScriptの仕様通りに動作しないJavaScriptのエンジンは、
         | 
| 24 49 | 
             
            勧告に従って作られてない欠陥品として世のエンジニアやユーザーから見放されることになります。
         | 
| 25 50 |  | 
| 26 | 
            -
            有名なChrome、Firefox等のブラウザは早々にこのECMAScriptに準拠したJavaScriptエンジンを作成しました。
         | 
| 27 | 
            -
            マイクロソフト社のIEは一度世に出してしまうとバージョンアップさせられない、
         | 
| 28 | 
            -
            下位互換を重視する都合で中々追従出来ませんでしたが、IE9や10あたりでようやくECMAScriptに準拠したJavaScriptエンジンを用意することが出来ました。
         | 
| 29 | 
            -
             | 
| 30 51 | 
             
            この辺の歴史を考慮に入れて考えると、
         | 
| 31 52 |  | 
| 32 53 | 
             
            - ECMAScript: ECMAが作った仕様
         | 
| 33 54 | 
             
            - JavaScript: ブラウザ作ってる団体が実装したエンジン
         | 
| 34 55 |  | 
| 35 56 | 
             
            こういう違いがあります。
         | 
| 36 | 
            -
            もしかすると追従しきれてない仕様が存在するかも知れませんが、
         | 
| 37 | 
            -
            世の殆どのJavaScriptはECMAScriptに書いてある仕様通りに動作するようになっているはずです。
         | 
| 38 57 |  | 
| 58 | 
            +
            今日では有名所のブラウザはほぼ全てECMAScriptに準拠しています。
         | 
| 39 | 
            -
             | 
| 59 | 
            +
            新しいバージョンのES6以降…に関しては仕様が新しすぎるので、古いブラウザでは準拠しきれてないものもありますが、
         | 
| 40 | 
            -
             | 
| 41 | 
            -
            その通りです。
         | 
| 42 | 
            -
             | 
| 43 | 
            -
            同じFirefoxというブラウザ一つをとっても、
         | 
| 44 | 
            -
            JavaScript | 
| 60 | 
            +
            ES5までならJavaScriptが動作すると謳っているブラウザはほぼ完璧に対応しています。
         | 
| 45 | 
            -
            Chromeなんかも同じV8エンジンですが中身はコロコロ変わっているはずです。
         | 
| 46 | 
            -
             | 
| 47 | 
            -
            > ③仕様という言葉の意味について
         | 
| 48 | 
            -
             | 
| 49 | 
            -
            1の回答に全部書いてしまいました。
         | 
