From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../reference/global_objects/globalthis/index.html | 95 ++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 files/ja/web/javascript/reference/global_objects/globalthis/index.html (limited to 'files/ja/web/javascript/reference/global_objects/globalthis') diff --git a/files/ja/web/javascript/reference/global_objects/globalthis/index.html b/files/ja/web/javascript/reference/global_objects/globalthis/index.html new file mode 100644 index 0000000000..cecf714961 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/globalthis/index.html @@ -0,0 +1,95 @@ +--- +title: globalThis +slug: Web/JavaScript/Reference/Global_Objects/globalThis +tags: + - JavaScript + - Property + - Reference + - global + - globalThis + - this +translation_of: Web/JavaScript/Reference/Global_Objects/globalThis +--- +
{{jsSidebar("Objects")}}
+ +

globalThis はグローバルプロパティで、グローバルオブジェクトと同等であるグローバルな this が格納されています。

+ +
{{EmbedInteractiveExample("pages/js/globalprops-globalthis.html","shorter")}}
+ + + +

{{JS_Property_Attributes(1, 0, 1)}}

+ +

解説

+ +

従来、グローバルスコープにアクセスするには、JavaScript 環境ごとに異なる構文を必要としていました。ウェブ上では {{domxref("Window.window", "window")}}, {{domxref("Window.self", "self")}}, {{domxref("Window.frames", "frames")}} を使うことができます。しかし Web Workerself のみを利用することができます。Node.js はこれらのいずれも利用できず、代わりに global を使用する必要があります。
+ this キーワードは、strict でないモードで実行されている関数の中で使用することもできますが、strict モードで実行されているモジュールや関数の中では undefined になります。Function('return this')() を使用することもできますが、{{Glossary("CSP")}} などによって {{jsxref("eval", "eval()")}} を無効にしている環境では、この方法でも {{jsxref("Function")}} の使用が抑制されます。

+ +

globalThis プロパティは、環境を越えてグローバルな this 値 (すなわちグローバルオブジェクト自身) にアクセスするための標準的な方法を提供します。windowself などの同様のプロパティとは異なり、これはウィンドウのコンテキストでも非ウィンドウのコンテキストでも動作することが保証されています。この方法では、コードがどの環境で実行されているのかを知らなくても、一貫した方法でグローバルオブジェクトにアクセスすることができます。名前を覚えやすくするために、グローバルスコープでは this の値は globalThis であることを忘れないでください。

+ +

HTML と WindowProxy

+ +

多くのエンジンでは globalThis は実在のグローバルオブジェクトの参照になりますが、ウェブブラウザーにおいては、iframe およびウィンドウ間のセキュリティ上の配慮から、これは (直接アクセスできない) 実在のグローバルオブジェクトに関する {{jsxref("Proxy")}} になります。一般的な利用に関わることは稀ですが、認識しておくことは重要です。

+ +

命名

+ +

selfglobal のような他の一般的な名前の選択肢は、既存のコードとの互換性を損なう可能性があるため、候補から除外されました。詳しくは language proposal's "naming" document を参照してください。

+ +

+ +

異なる環境間でグローバルの検索

+ +

globalThis 以前は、その環境のグローバルオブジェクトを取得する信頼性の高い方法は Function('return this')() だけでした。ただし、これは設定によっては CSP 違反が発生するため、es6-shim では次のようなチェックを使用します。

+ +
var getGlobal = function () {
+  if (typeof self !== 'undefined') { return self; }
+  if (typeof window !== 'undefined') { return window; }
+  if (typeof global !== 'undefined') { return global; }
+  throw new Error('unable to locate global object');
+};
+
+var globals = getGlobal();
+
+if (typeof globals.setTimeout !== 'function') {
+  // no setTimeout in this environment!
+}
+
+ +

globalThis が利用可能になったため、異なる環境間でグローバルを追加で検索する必要がなくなりました。

+ +
if (typeof globalThis.setTimeout !== 'function') {
+  // no setTimeout in this environment!
+}
+ +

仕様

+ + + + + + + + + + + + +
仕様書
{{SpecName("ESDraft", "#sec-globalthis", "globalThis")}}
+ +

ブラウザーの互換性

+ + + +

{{Compat("javascript.builtins.globalThis")}}

+ +

実装の進捗状況

+ +

この機能はまだブラウザー間で相互運用できる安定度に達していないため、以下の表では、この機能の日次の実装状況を示しています。このデータは JavaScript の標準テストスイートである Test262 で、各ブラウザーの JavaScript エンジンのナイトリービルドまたは最新リリースで関連する機能を実行して見ることにより生成しています。

+ +
{{EmbedTest262ReportResultsTable("globalThis")}}
+ +

関連情報

+ + -- cgit v1.2.3-54-g00ecf