回答編集履歴
3
markdown修正
test
CHANGED
@@ -168,7 +168,7 @@
|
|
168
168
|
|
169
169
|
|
170
170
|
|
171
|
-
正しくは「関数宣言(FunctionDeclaration)」であり、「スプレッド要素(SpreadElement)」です。
|
171
|
+
正しくは「**関数宣言(FunctionDeclaration)**」であり、「**スプレッド要素(SpreadElement)**」です。
|
172
172
|
|
173
173
|
|
174
174
|
|
2
表現の微修正
test
CHANGED
@@ -168,13 +168,13 @@
|
|
168
168
|
|
169
169
|
|
170
170
|
|
171
|
-
正しくは「
|
171
|
+
正しくは「関数宣言(FunctionDeclaration)」であり、「スプレッド要素(SpreadElement)」です。
|
172
172
|
|
173
173
|
|
174
174
|
|
175
175
|
- [14.1 Function Definitions - ECMAScript® 2017 Language Specification](http://www.ecma-international.org/ecma-262/8.0/#sec-function-definitions)
|
176
176
|
|
177
|
-
- [12.2.5 Array Initializer](http://www.ecma-international.org/ecma-262/8.0/#sec-array-initializer)
|
177
|
+
- [12.2.5 Array Initializer - ECMAScript® 2017 Language Specification](http://www.ecma-international.org/ecma-262/8.0/#sec-array-initializer)
|
178
178
|
|
179
179
|
|
180
180
|
|
1
MSDNは閉鎖され、MDNへ統合、等、諸々を追記
test
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
### MDN の用途
|
2
|
+
|
3
|
+
|
4
|
+
|
1
5
|
MDNはJavaScriptでも仕様としてはやや間違っていることがあるので、心から信頼してはいません。
|
2
6
|
|
3
7
|
|
@@ -20,4 +24,174 @@
|
|
20
24
|
|
21
25
|
|
22
26
|
|
27
|
+
**(2017/12/23 10:40追記)**
|
28
|
+
|
29
|
+
x_x さんよりMSDNに行くとMDNにリダイレクトされるという情報を頂きましたので、後述します。
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
### MSDNは閉鎖され、MDNへ統合
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
ドキュメントを一元管理する為にWebブラウザのドキュメントをMSDNに一本化する流れなのだそうです。
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
- [マイクロソフト、Google、W3C、Mozillaらが協力。それぞれのWebブラウザのドキュメントをMozillaサイトに一本化。あちこちのWebサイトを見て回らなくても済むように - Publickey](http://www.publickey1.jp/blog/17/googlew3cmozillawebmozillaweb.html)
|
42
|
+
|
43
|
+
- [Documenting the Web together - Microsoft Edge Dev BlogMicrosoft Edge Dev Blog](https://blogs.windows.com/msedgedev/2017/10/18/documenting-web-together-mdn-web-docs/)
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
そこで `innerHTML` のドキュメント参照を試みたところ、確かにリダイレクトされました。
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
- [http://msdn.microsoft.com/en-us/library/ms533897.aspx](http://msdn.microsoft.com/en-us/library/ms533897.aspx)
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
↓
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
- [https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML](https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML)
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
しかし、MDNはブラウザベンダーの情報としては足りてないですね。
|
64
|
+
|
65
|
+
旧来のIE(IE8-?もう忘れました)でtable関連要素がinnerHTMLで書き換えられない、という仕様が書かれていません。
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
これは「古きIEは捨ててMicrosoft Edgeを使ってください」というMSからのメッセージなのでしょうか。
|
70
|
+
|
71
|
+
しかし、それなら「Edge独自の仕様orバグ」がMDNに記載されていなければならないのですが、私は見たことがありません。
|
72
|
+
|
73
|
+
MDNにどこまで「**IE/Edgeの仕様**」が書かれているのかが不明なので、私としては歓迎できない流れですね…。
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
### 「Web標準仕様」と「Webブラウザの仕様」
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
HTML/CSS/JavaScriptの仕様には二種類あります。
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
- Web標準仕様 (W3C, WHATWG, Ecma International 等の標準化団体が定めた実装が遵守しなければならない標準仕様)
|
86
|
+
|
87
|
+
- Webブラウザの仕様 (Google Chrome, Firefox, IE, Edge 等の各Webブラウザが持つ独自の仕様)
|
88
|
+
|
89
|
+
|
90
|
+
|
91
|
+
私が「仕様」と書いたときには大体前者ですが、後者の仕様を知りたい時に私は MDN, MSDN, caniuse, その他Compatible Tableサイトを利用してきました。
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
### ブラウザベンダーとしてのMDN
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
MDNは「Webブラウザの仕様書」の位置づけで「Firefoxベンダーが作成したリファレンス」です。
|
100
|
+
|
101
|
+
つまり、Firefox独自の仕様にも触れられています。
|
102
|
+
|
103
|
+
|
104
|
+
|
105
|
+
例えば、過去に「`typeof` 演算子で RegExp オブジェクトを判定した時の返り値がWebブラウザによって異なる」という事象がありました。
|
106
|
+
|
107
|
+
|
108
|
+
|
109
|
+
- [Google Chrome 6 は (typeof /foo/ === 'function') となる - Togetter](https://togetter.com/li/54845)
|
110
|
+
|
111
|
+
|
112
|
+
|
113
|
+
```JavaScript
|
114
|
+
|
115
|
+
console.log(typeof /test/); // "object" or "function"
|
116
|
+
|
117
|
+
```
|
118
|
+
|
119
|
+
|
120
|
+
|
121
|
+
当時のFirefoxでは "object" を返し、Google Chrome では "function" を返しました。
|
122
|
+
|
123
|
+
なぜ、そうなるかといえば、Google Chrome 及び Firefox は `/test/` に暗黙の内に `RegExp.prototype.exec` の機能を持たせていたからです(この機能は ECMAScript には存在しない独自拡張です)。
|
124
|
+
|
125
|
+
RegExp.prototype.exec は関数(`[[Call]]` を持つ)の為、typeof 演算子は "function" を返さなければなりません(MUST)。
|
126
|
+
|
127
|
+
ところが、Firefox は暗黙の内に RegExp.prototype.exec を持っていながら、typeof 演算子が "object" を返す動作でした。
|
128
|
+
|
129
|
+
おそらく、ECMAScript では本来、RegExp.prototype.exec を持っていない為、本来のECMAScriptと同じ振る舞いをするように typeof 演算子の返り値をコントロールしていたものと考えられます。
|
130
|
+
|
131
|
+
しかし、[[Call]] を持ちながら、typeof 演算子が "object" を返す動作は**意図的にECMAScriptに違反**しています。
|
132
|
+
|
133
|
+
|
134
|
+
|
135
|
+
現在では Google Chrome, Firefox から「暗黙のRegExp.prototype.exec」の機能が取り除かれ、Firefox, Google Chrome の typeof 演算子は "object" を返すようになりました。
|
136
|
+
|
137
|
+
現在はありませんが、機能が取り除かれるまではMDNの「RegExp.prototype.exec()」のページに暗黙のexecについて説明がありました。
|
138
|
+
|
139
|
+
|
140
|
+
|
141
|
+
- [RegExp.prototype.exec() - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec)
|
142
|
+
|
143
|
+
|
144
|
+
|
145
|
+
このようにMDNは「Firefox独自の仕様」を知る時は役立ちます。
|
146
|
+
|
147
|
+
これはMDNに書かれた情報が「Firefox独自の仕様」と「Web標準仕様」のどちらなのか、を区別しなければならない、という事でもあります。
|
148
|
+
|
149
|
+
MDNはある程度、Firefox独自の仕様と区別できるように配慮されているようですが、十分な注意が必要です。
|
150
|
+
|
151
|
+
|
152
|
+
|
153
|
+
### MDN上の間違った用語
|
154
|
+
|
155
|
+
|
156
|
+
|
157
|
+
MDNでは「function文」や「スプレッド演算子」など、間違った用語が散見される為、私個人としては表現方法においてMDNの印象が良くありません。
|
158
|
+
|
159
|
+
(「function - JavaScript | MDN」ですが、以前のタイトルは「function文」でした。
|
160
|
+
|
161
|
+
現在ではタイトルだけ修正されていますが、本文上では「function 宣言」と「function 文」が存在し、表現上の揺らぎが見られます。)
|
162
|
+
|
163
|
+
|
164
|
+
|
165
|
+
- [function - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/function)
|
166
|
+
|
167
|
+
- [スプレッド演算子 - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Spread_operator)
|
168
|
+
|
169
|
+
|
170
|
+
|
171
|
+
正しくは「function文」は「関数宣言(FunctionDeclaration)」であり、「スプレッド要素(SpreadElement)」です。
|
172
|
+
|
173
|
+
|
174
|
+
|
175
|
+
- [14.1 Function Definitions - ECMAScript® 2017 Language Specification](http://www.ecma-international.org/ecma-262/8.0/#sec-function-definitions)
|
176
|
+
|
177
|
+
- [12.2.5 Array Initializer](http://www.ecma-international.org/ecma-262/8.0/#sec-array-initializer)
|
178
|
+
|
179
|
+
|
180
|
+
|
181
|
+
実際、日本人でMDNを参考にする人は多く、間違った用語を使う人を何度も見てきました。
|
182
|
+
|
183
|
+
特に「スプレッド演算子」についてはそれが正しい用語だと思っている人が大半であり、ブログやリファレンス、Q&Aサイトの多くが「スプレッド演算子」と表現しています。
|
184
|
+
|
185
|
+
私の知る限りでは正しく使っていたサイトは JS.next だけでした。
|
186
|
+
|
187
|
+
|
188
|
+
|
189
|
+
- [Spread要素が実装された - JS.next](http://js-next.hatenablog.com/entry/2015/06/24/100705)
|
190
|
+
|
191
|
+
|
192
|
+
|
193
|
+
細かいことかもしれませんが、間違った用語から誤解が進むこともあるので、用語は正しく使ってほしいと思っています。
|
194
|
+
|
195
|
+
|
196
|
+
|
23
197
|
Re: anndonut さん
|