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

回答編集履歴

3

markdown修正

2017/12/23 02:53

投稿

think49
think49

スコア18194

answer CHANGED
@@ -83,7 +83,7 @@
83
83
  - [function - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/function)
84
84
  - [スプレッド演算子 - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Spread_operator)
85
85
 
86
- 正しくは「関数宣言(FunctionDeclaration)」であり、「スプレッド要素(SpreadElement)」です。
86
+ 正しくは「**関数宣言(FunctionDeclaration)**」であり、「**スプレッド要素(SpreadElement)**」です。
87
87
 
88
88
  - [14.1 Function Definitions - ECMAScript® 2017 Language Specification](http://www.ecma-international.org/ecma-262/8.0/#sec-function-definitions)
89
89
  - [12.2.5 Array Initializer - ECMAScript® 2017 Language Specification](http://www.ecma-international.org/ecma-262/8.0/#sec-array-initializer)

2

表現の微修正

2017/12/23 02:53

投稿

think49
think49

スコア18194

answer CHANGED
@@ -83,10 +83,10 @@
83
83
  - [function - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/function)
84
84
  - [スプレッド演算子 - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Spread_operator)
85
85
 
86
- 正しくは「function文」は「関数宣言(FunctionDeclaration)」であり、「スプレッド要素(SpreadElement)」です。
86
+ 正しくは「関数宣言(FunctionDeclaration)」であり、「スプレッド要素(SpreadElement)」です。
87
87
 
88
88
  - [14.1 Function Definitions - ECMAScript® 2017 Language Specification](http://www.ecma-international.org/ecma-262/8.0/#sec-function-definitions)
89
- - [12.2.5 Array Initializer](http://www.ecma-international.org/ecma-262/8.0/#sec-array-initializer)
89
+ - [12.2.5 Array Initializer - ECMAScript® 2017 Language Specification](http://www.ecma-international.org/ecma-262/8.0/#sec-array-initializer)
90
90
 
91
91
  実際、日本人でMDNを参考にする人は多く、間違った用語を使う人を何度も見てきました。
92
92
  特に「スプレッド演算子」についてはそれが正しい用語だと思っている人が大半であり、ブログやリファレンス、Q&Aサイトの多くが「スプレッド演算子」と表現しています。

1

MSDNは閉鎖され、MDNへ統合、等、諸々を追記

2017/12/23 02:50

投稿

think49
think49

スコア18194

answer CHANGED
@@ -1,3 +1,5 @@
1
+ ### MDN の用途
2
+
1
3
  MDNはJavaScriptでも仕様としてはやや間違っていることがあるので、心から信頼してはいません。
2
4
 
3
5
  - Firefoxの仕様を知りたい時に有用
@@ -9,4 +11,89 @@
9
11
  所詮はブラウザベンダーのサイトなので、「Firefoxの仕様を知りたい時に利用」が本来の用途なのだと認識しています。
10
12
  IEの仕様を知りたくて、MSDNから情報を追うようなものです。
11
13
 
14
+ **(2017/12/23 10:40追記)**
15
+ x_x さんよりMSDNに行くとMDNにリダイレクトされるという情報を頂きましたので、後述します。
16
+
17
+ ### MSDNは閉鎖され、MDNへ統合
18
+
19
+ ドキュメントを一元管理する為にWebブラウザのドキュメントをMSDNに一本化する流れなのだそうです。
20
+
21
+ - [マイクロソフト、Google、W3C、Mozillaらが協力。それぞれのWebブラウザのドキュメントをMozillaサイトに一本化。あちこちのWebサイトを見て回らなくても済むように - Publickey](http://www.publickey1.jp/blog/17/googlew3cmozillawebmozillaweb.html)
22
+ - [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/)
23
+
24
+ そこで `innerHTML` のドキュメント参照を試みたところ、確かにリダイレクトされました。
25
+
26
+ - [http://msdn.microsoft.com/en-us/library/ms533897.aspx](http://msdn.microsoft.com/en-us/library/ms533897.aspx)
27
+
28
+  ↓
29
+
30
+ - [https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML](https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML)
31
+
32
+ しかし、MDNはブラウザベンダーの情報としては足りてないですね。
33
+ 旧来のIE(IE8-?もう忘れました)でtable関連要素がinnerHTMLで書き換えられない、という仕様が書かれていません。
34
+
35
+ これは「古きIEは捨ててMicrosoft Edgeを使ってください」というMSからのメッセージなのでしょうか。
36
+ しかし、それなら「Edge独自の仕様orバグ」がMDNに記載されていなければならないのですが、私は見たことがありません。
37
+ MDNにどこまで「**IE/Edgeの仕様**」が書かれているのかが不明なので、私としては歓迎できない流れですね…。
38
+
39
+ ### 「Web標準仕様」と「Webブラウザの仕様」
40
+
41
+ HTML/CSS/JavaScriptの仕様には二種類あります。
42
+
43
+ - Web標準仕様 (W3C, WHATWG, Ecma International 等の標準化団体が定めた実装が遵守しなければならない標準仕様)
44
+ - Webブラウザの仕様 (Google Chrome, Firefox, IE, Edge 等の各Webブラウザが持つ独自の仕様)
45
+
46
+ 私が「仕様」と書いたときには大体前者ですが、後者の仕様を知りたい時に私は MDN, MSDN, caniuse, その他Compatible Tableサイトを利用してきました。
47
+
48
+ ### ブラウザベンダーとしてのMDN
49
+
50
+ MDNは「Webブラウザの仕様書」の位置づけで「Firefoxベンダーが作成したリファレンス」です。
51
+ つまり、Firefox独自の仕様にも触れられています。
52
+
53
+ 例えば、過去に「`typeof` 演算子で RegExp オブジェクトを判定した時の返り値がWebブラウザによって異なる」という事象がありました。
54
+
55
+ - [Google Chrome 6 は (typeof /foo/ === 'function') となる - Togetter](https://togetter.com/li/54845)
56
+
57
+ ```JavaScript
58
+ console.log(typeof /test/); // "object" or "function"
59
+ ```
60
+
61
+ 当時のFirefoxでは "object" を返し、Google Chrome では "function" を返しました。
62
+ なぜ、そうなるかといえば、Google Chrome 及び Firefox は `/test/` に暗黙の内に `RegExp.prototype.exec` の機能を持たせていたからです(この機能は ECMAScript には存在しない独自拡張です)。
63
+ RegExp.prototype.exec は関数(`[[Call]]` を持つ)の為、typeof 演算子は "function" を返さなければなりません(MUST)。
64
+ ところが、Firefox は暗黙の内に RegExp.prototype.exec を持っていながら、typeof 演算子が "object" を返す動作でした。
65
+ おそらく、ECMAScript では本来、RegExp.prototype.exec を持っていない為、本来のECMAScriptと同じ振る舞いをするように typeof 演算子の返り値をコントロールしていたものと考えられます。
66
+ しかし、[[Call]] を持ちながら、typeof 演算子が "object" を返す動作は**意図的にECMAScriptに違反**しています。
67
+
68
+ 現在では Google Chrome, Firefox から「暗黙のRegExp.prototype.exec」の機能が取り除かれ、Firefox, Google Chrome の typeof 演算子は "object" を返すようになりました。
69
+ 現在はありませんが、機能が取り除かれるまではMDNの「RegExp.prototype.exec()」のページに暗黙のexecについて説明がありました。
70
+
71
+ - [RegExp.prototype.exec() - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec)
72
+
73
+ このようにMDNは「Firefox独自の仕様」を知る時は役立ちます。
74
+ これはMDNに書かれた情報が「Firefox独自の仕様」と「Web標準仕様」のどちらなのか、を区別しなければならない、という事でもあります。
75
+ MDNはある程度、Firefox独自の仕様と区別できるように配慮されているようですが、十分な注意が必要です。
76
+
77
+ ### MDN上の間違った用語
78
+
79
+ MDNでは「function文」や「スプレッド演算子」など、間違った用語が散見される為、私個人としては表現方法においてMDNの印象が良くありません。
80
+ (「function - JavaScript | MDN」ですが、以前のタイトルは「function文」でした。
81
+ 現在ではタイトルだけ修正されていますが、本文上では「function 宣言」と「function 文」が存在し、表現上の揺らぎが見られます。)
82
+
83
+ - [function - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/function)
84
+ - [スプレッド演算子 - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Spread_operator)
85
+
86
+ 正しくは「function文」は「関数宣言(FunctionDeclaration)」であり、「スプレッド要素(SpreadElement)」です。
87
+
88
+ - [14.1 Function Definitions - ECMAScript® 2017 Language Specification](http://www.ecma-international.org/ecma-262/8.0/#sec-function-definitions)
89
+ - [12.2.5 Array Initializer](http://www.ecma-international.org/ecma-262/8.0/#sec-array-initializer)
90
+
91
+ 実際、日本人でMDNを参考にする人は多く、間違った用語を使う人を何度も見てきました。
92
+ 特に「スプレッド演算子」についてはそれが正しい用語だと思っている人が大半であり、ブログやリファレンス、Q&Aサイトの多くが「スプレッド演算子」と表現しています。
93
+ 私の知る限りでは正しく使っていたサイトは JS.next だけでした。
94
+
95
+ - [Spread要素が実装された - JS.next](http://js-next.hatenablog.com/entry/2015/06/24/100705)
96
+
97
+ 細かいことかもしれませんが、間違った用語から誤解が進むこともあるので、用語は正しく使ってほしいと思っています。
98
+
12
99
  Re: anndonut さん