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