* 仕様書 [REFS[ -[2] [CITE[ECMAScript Language Specification (HTML version)]] ([TIME[2009-04-03 04:43:48 +09:00]] 版) -- '''''' -- - [10] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2014-04-03 03:44:44 +09:00]] 版) - [23] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2013-07-29 23:11:14 +09:00]] 版) - [24] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2013-07-29 23:11:14 +09:00]] 版) ]REFS] * 大域環境 [25] [DFN[JavaScript [RUBYB[大域環境]@en[global environment]]]]は、 [[JavaScript]] の仕様書における[DFN[[RUBYB[大域環境]@en[global environment]]]]と同義です [SRC[>>23]]。 * スクリプト設定群オブジェクト [11] [[スクリプト]]は[[スクリプト設定群オブジェクト]]を持ちますが、 [[スクリプト設定群オブジェクト]]は[DFN[[RUBYB[[[大域オブジェクト]]]@en[global object]]]]を持ちます。 [[大域オブジェクト]]は、当該[[設定群オブジェクト]]を使う[[スクリプト]]が呼び出せる [[API]] を提供する[[オブジェクト]]です。 [SRC[>>10]] ;; [12] これは特に [[JavaScript]] に限定せずに定義されています。ただし [[JavaScript]] 以外で利用する方法はどの仕様書でも規定されていません。 ;; [29] 空の[[オブジェクト]]を[[大域オブジェクト]]とすると、環境に対して作用できないようになります。 [SRC[>>10]] [32] [[スクリプト設定群オブジェクト]]と[[大域オブジェクト]]は一対一対応関係にあります。 [[大域オブジェクト]]から見て[[スクリプト設定群オブジェクト]]のことを[[大域オブジェクトの関連する設定群オブジェクト]]といいます。 [SRC[>>10]] * 分類 [22] [[JavaScript大域環境]]には次の3種類があります [SRC[>>23]]。それぞれ異なる種類の[[大域オブジェクト]]を用いています。 [FIG[ - [18] [RUBYB[[[文書環境]]]@en[document environment]] ([[大域オブジェクト]]: [CODE(DOMi)@en[[[Window]]]]) - [19] [RUBYB[[[ワーカー環境]]]@en[worker environment]] ([[大域オブジェクト]]: [CODE(DOMi)@en[[[Worker]]]]) -- [20] [RUBYB[[[専用ワーカー環境]]]@en[dedicated worker environment]] ([[大域オブジェクト]]: [CODE(DOMi)@en[[[DedicatedWorker]]]]) -- [21] [RUBYB[[[共有ワーカー環境]]]@en[shared worker environment]] ([[大域オブジェクト]]: [CODE(DOMi)@en[[[SharedWorker]]]]) ]FIG] [26] 特記なき場合 [[JavaScript大域環境]]は[[文書環境]]です [SRC[>>23]]。 [27] >>18 の特殊ケースとして、[[大域オブジェクト]]が [CODE(DOMi)@en[[[Window]]]] と [CODE(DOMi)@en[[[WindowModal]]]] の両方を[[実装]]したオブジェクトとなる [SRC[>>12]] ことがあります。 [28] [[ウィジェット実現値]]では [CODE(DOMi)@en[[[Window]]]] [[オブジェクト]]が [CODE(DOMi)@en[[[WindowWidget]]]] も[[実装]]することになっています。 * JavaScript 大域実行文脈 [30] [[スクリプト]]の[[設定群オブジェクト]]の[[大域オブジェクト]]が [CODE(DOMi)@en[[[Window]]]] の時、 [[JavaScript]] の[[大域実行文脈]]の [CODE(JS)@en[[[ThisBinding]]]] ([CODE(JS)@en[[[this]]]]) はその [CODE(DOMi)@en[[[Window]]]] [[オブジェクト]]自体ではなく、その [CODE(DOMi)@en[[[Window]]]] [[オブジェクト]]の [CODE(DOMi)@en[[[WindowProxy]]]] [[オブジェクト]]としなければ[['''なりません''']]。 [SRC[>>10]] ;; [31] [[ES5]] 仕様上は[[大域オブジェクト]]自体が [CODE(JS)@en[[[this]]]] によって返されることになっていますが、 実際の [[Webブラウザー]]上は [CODE(DOMi)@en[[[Window]]]] [[オブジェクト]]に[[スクリプト]]がアクセスすることができず、 常に代わりに [CODE(DOMi)@en[[[WindowProxy]]]] [[オブジェクト]]が返されることになっています。 これは [[ES]] 仕様書に対する [[HTML Standard]] の[[意図的違反]]です [SRC[>>10]]。 * JavaScript 大域オブジェクトの内部特性 [4] :[CODE(JS)@en[[['''[''''''['''Call''']'''''']''']]]]:なし [SRC[[[ES3]] 15.1]] :[CODE(JS)@en[[['''[''''''['''CanPut''']'''''']''']]]]:標準 [SRC[[[ES3]] 18.6.2.3]] :[CODE(JS)@en[[['''[''''''['''Class''']'''''']''']]]]:[[実装依存]] [SRC[[[ES3]] 15.1]] :[CODE(JS)@en[[['''[''''''['''Construct''']'''''']''']]]]:なし [SRC[[[ES3]] 15.1]] :[CODE(JS)@en[[['''[''''''['''Default''']'''''']''']]]]:標準 [SRC[[[ES3]] 18.6.2.6]] :[CODE(JS)@en[[['''[''''''['''Delete''']'''''']''']]]]:標準 [SRC[[[ES3]] 18.6.2.5]] :[CODE(JS)@en[[['''[''''''['''Get''']'''''']''']]]]:標準 [SRC[[[ES3]] 18.6.2.1]] :[CODE(JS)@en[[['''[''''''['''HasProperty''']'''''']''']]]]:標準 [SRC[[[ES3]] 18.6.2.4]] :[CODE(JS)@en[[['''[''''''['''Prototype''']'''''']''']]]]:[[実装依存]] [SRC[[[ES3]] 15.1]] :[CODE(JS)@en[[['''[''''''['''Put''']'''''']''']]]]:標準 [SRC[[[ES3]] 18.6.2.2]] * JavaScript 大域オブジェクトのメンバー [3] ,[CODE(JS)@en[[[Array]]]],[[ECMA]] [[標準]],[[ES3]] ,[CODE(JS)@en[[[Boolean]]]],[[ECMA]] [[標準]],[[ES3]] ,[CODE(JS)@en[[[Date]]]],[[ECMA]] [[標準]],[[ES3]] ,[CODE(JS)@en[[[decodeURI]]]],[[ECMA]] [[標準]],[[ES3]] ,[CODE(JS)@en[[[decodeURIComponent]]]],[[ECMA]] [[標準]],[[ES3]] ,[CODE(JS)@en[[[encodeURI]]]],[[ECMA]] [[標準]],[[ES3]] ,[CODE(JS)@en[[[encodeURIComponent]]]],[[ECMA]] [[標準]],[[ES3]] ,[CODE(JS)@en[[[escape]]]],[[ECMA]] [[標準]] ([[参考]]),[[ES3]] ([[参考]]) ,[CODE(JS)@en[[[Error]]]],[[ECMA]] [[標準]],[[ES3]] ,[CODE(JS)@en[[[eval]]]],[[ECMA]] [[標準]],[[ES3]] ,[CODE(JS)@en[[[EvalError]]]],[[ECMA]] [[標準]],[[ES3]] ,[CODE(JS)@en[[[Function]]]],[[ECMA]] [[標準]],[[ES3]] ,[CODE(JS)@en[[[Infinity]]]],[[ECMA]] [[標準]],[[ES3]] ,[CODE(JS)@en[[[isFinite]]]],[[ECMA]] [[標準]],[[ES3]] ,[CODE(JS)@en[[[isNaN]]]],[[ECMA]] [[標準]],[[ES3]] ,[CODE(JS)@en[[[Math]]]],[[ECMA]] [[標準]],[[ES3]] ,[CODE(JS)@en[[[NaN]]]],[[ECMA]] [[標準]],[[ES3]] ,[CODE(JS)@en[[[Number]]]],[[ECMA]] [[標準]],[[ES3]] ,[CODE(JS)@en[[[Object]]]],[[ECMA]] [[標準]],[[ES3]] ,[CODE(JS)@en[[[parseFloat]]]],[[ECMA]] [[標準]],[[ES3]] ,[CODE(JS)@en[[[parseInt]]]],[[ECMA]] [[標準]],[[ES3]] ,[CODE(JS)@en[[[RangeError]]]],[[ECMA]] [[標準]],[[ES3]] ,[CODE(JS)@en[[[ReferenceError]]]],[[ECMA]] [[標準]],[[ES3]] ,[CODE(JS)@en[[[RegExp]]]],[[ECMA]] [[標準]],[[ES3]] ,[CODE(JS)@en[[[String]]]],[[ECMA]] [[標準]],[[ES3]] ,[CODE(JS)@en[[[SyntaxError]]]],[[ECMA]] [[標準]],[[ES3]] ,[CODE(JS)@en[[[TypeError]]]],[[ECMA]] [[標準]],[[ES3]] ,[CODE(JS)@en[[[undefined]]]],[[ECMA]] [[標準]],[[ES3]] ,[CODE(JS)@en[[[unescape]]]],[[ECMA]] [[標準]] ([[参考]]),[[ES3]] ([[参考]]) ,[CODE(JS)@en[[[URIError]]]],[[ECMA]] [[標準]],[[ES3]] * 歴史 [REFS[ - [15] [CITE@en[Web Applications 1.0 r2529 MAJOR CHANGES: Revamp the way scripts are specified, along with their interaction with resolving relative URLs, etc. Give enough detail to justify objects in the DOM not being garbage collected randomly when still in use. Define script groups, to handle scripts going away during document.open() and session history navigation. Define why and how setTimeout(), database transactions, etc, handle page transitions. Drop the terms 'with' and 'without' script, use script is 'enabled'/'disabled' instead. Define 'unload' and 'beforeunload'. Rework how onfoo=[SPAN[']][SPAN[']] and .onfoo event handler attributes are defined. Rework how the content model of