teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

校生

2019/03/26 05:09

投稿

miyabi-sun
miyabi-sun

スコア21461

answer CHANGED
@@ -15,46 +15,60 @@
15
15
 
16
16
  その通りです。
17
17
 
18
- 同じFirefoxというブラウザ一つをとっても
18
+ ベンダー毎にJavaScriptの実装(エンジン)は異なりますし
19
- JavaScriptの実行速度を改善する為に何度もJavaScriptエンジンを作り直しています。
19
+ 同じFirefoxというブラウザ一つをとっても、実行速度を改善する為に何度もエンジンを作り直しています。
20
- Chromeなんかも同じV8エンジンですが中身はコロコロ変わっているはずです。
20
+ Chromeなんかも同じV8エンジンですが、細かいバージョンアップを繰り返しているので内部ロジックはコロコロ変わっているはずです。
21
21
 
22
+ つまり`ブラウザの数 * ブラウザのバージョン番号`の数だけエンジンの実装が存在します。
23
+ ただしオープンソースで提供されているV8エンジンを流用しているブラウザなんてのもありますので、
24
+ 全てが全て自前の独自仕様というわけではありません。
25
+
22
26
  > ③仕様という言葉の意味について
23
27
 
24
- JavaScriptのエンジン部分はChromeが搭載しているV8エンジン有名ですが、
28
+ 歴史に知った方理解が捗ると思いますの解説していきま
25
- FirefoxやIE、Edgeなどなど…他のブラウザはV8エンジンではなく自作のエンジンでJavaScriptコードを動作させています。
26
- つまり、全てのブラウザは独自のJavaScriptエンジンを積んでいるので**同じ動作をする保証**はありません。
27
29
 
30
+ そもそもJavaScriptのエンジンは、
31
+ Javaのように誰かが作ったものを全世界で使っているわけではありません。
32
+ ブラウザ作ってるベンダーは自前のエンジンを用意して、
33
+ 他のブラウザに対するアピールポイントとして利用しています。
34
+
35
+ 質問文で気にされているポイントにフォーカスするならば、
36
+ 全てのブラウザは自前で用意したエンジンで実行するので**同じ動作をする保証**はありません。
37
+
28
38
  同じ動作しないってマジかよ…
29
- れは大昔のIEとネットスケープ(Firefoxの前身)の二大ブラウザがシェアを争っていた1990年代にさかのぼります。
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

ちょっと段落を編集

2019/03/26 05:09

投稿

miyabi-sun
miyabi-sun

スコア21461

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
- まずJavaScriptのエンジン部分はChromeが搭載しているV8エンジンが有名ですが、
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
- その時は統一仕様はなく、俺のブラウザのJavaScriptにはこん機能や関数があるだぜ」「なんの!こっちのJavaScriptにはあんな機能が搭載されているんだ!」と独自仕様を盛り込みまくっていました。
32
+ 「なんの!こっちのJavaScriptにはあんな機能が搭載されているんだ!」
33
+ ……と独自仕様を盛り込みまくる事で自社のブラウザの優位性を語っていました。
12
34
 
13
- シェアを争う為に切磋琢磨する事は良い事すが、ちょっと待てよ。
35
+ 、ちょっと待てよ。
14
- AのブラウザでしかJavaScriptが動作しないって、Webサイトの閲覧者相当困らないか???
36
+ AのブラウザでしかJavaScriptのコードが動作しないって、Webサイトの閲覧者相当困らないか???
15
- その通り、1990年代のWebサイトはこのブラウザの独自仕様
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
- > ②Javascriptの標準規格とう言葉を裏返すと、javascriptのはいくつか種類うことでしょうか?
59
+ 新しバージョンES6以降…に関して仕様新しすぎので、古ブラウザは準拠きれてないものもありますが、
40
-
41
- その通りです。
42
-
43
- 同じFirefoxというブラウザ一つをとっても、
44
- JavaScriptの実行速度を改善する何度もJavaScriptエンジンを作り直しています。
60
+ ES5までならJavaScriptが動作すると謳っているブラウザはほぼ完璧対応しています。
45
- Chromeなんかも同じV8エンジンですが中身はコロコロ変わっているはずです。
46
-
47
- > ③仕様という言葉の意味について
48
-
49
- 1の回答に全部書いてしまいました。