diff options
Diffstat (limited to 'files/ja/web/javascript/reference/global_objects/symbol')
22 files changed, 1858 insertions, 0 deletions
diff --git a/files/ja/web/javascript/reference/global_objects/symbol/@@toprimitive/index.html b/files/ja/web/javascript/reference/global_objects/symbol/@@toprimitive/index.html new file mode 100644 index 0000000000..7940330fc3 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/@@toprimitive/index.html @@ -0,0 +1,64 @@ +--- +title: 'Symbol.prototype[@@toPrimitive]' +slug: Web/JavaScript/Reference/Global_Objects/Symbol/@@toPrimitive +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/@@toPrimitive +--- +<div>{{JSRef}}</div> + +<p><strong><code>[@@toPrimitive]()</code></strong> メソッドは、 Symbol オブジェクトをプリミティブ値に変換します。</p> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox notranslate">Symbol()[Symbol.toPrimitive](<var>hint</var>) +</pre> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p>{{jsxref("Symbol")}} オブジェクトで指定されたプリミティブ値です。</p> + +<h2 id="Description" name="Description">解説</h2> + +<p>{{jsxref("Symbol")}} オブジェクトの <code>[@@toPrimitive]()</code> メソッドは、 Symbol オブジェクトのプリミティブ値を Symbol データ型として返します。 <code><var>hint</var></code> 引数は使われません。</p> + +<p>JavaScript はオブジェクトをプリミティブ値に変換するために <code>[@@toPrimitive]()</code> メソッドを呼び出します。 <code>[@@toPrimitive]()</code> メソッドを自分で呼び出す必要はほとんどありません。 JavaScript は、プリミティブ値が期待されているオブジェクトに遭遇したときに、自動的にこれを呼び出します。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Using_toPrimitive" name="Using_toPrimitive">@@toPrimitive の使用</h3> + +<pre class="brush: js notranslate">const sym = Symbol("example"); +sym === sym[Symbol.toPrimitive](); // true +</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol.prototype-@@toprimitive', 'Symbol.prototype.@@toPrimitive')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Symbol.@@toPrimitive")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Symbol.toPrimitive")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/symbol/asynciterator/index.html b/files/ja/web/javascript/reference/global_objects/symbol/asynciterator/index.html new file mode 100644 index 0000000000..386580dbd8 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/asynciterator/index.html @@ -0,0 +1,82 @@ +--- +title: Symbol.asyncIterator +slug: Web/JavaScript/Reference/Global_Objects/Symbol/asyncIterator +tags: + - ECMAScript 2018 + - JavaScript + - Property + - Reference + - Symbol + - asynchronous +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/asyncIterator +--- +<div>{{JSRef}}</div> + +<p><strong><code>Symbol.asyncIterator</code></strong> は、オブジェクトのデフォルトの AsyncIterator を指定します。このプロパティがオブジェクトに設定されている場合、それは非同期反復可能項目であり、<code><a href="/ja/docs/Web/JavaScript/Reference/Statements/for-await...of">for await...of</a></code> ループで使用できます。</p> + + + +<h2 id="Description" name="Description">説明</h2> + +<p><code>Symbol.asyncIterator</code> シンボルは、オブジェクトの <code>@@asyncIterator</code> メソッドにアクセスするための組み込みシンボルです。オブジェクトを非同期で反復可能にするには、<code>Symbol.asyncIterator</code> キーが必要です。</p> + +<p>{{js_property_attributes(0,0,0)}}</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="User-defined_Async_Iterables" name="User-defined_Async_Iterables">ユーザー定義の非同期反復可能項目</h3> + +<p>オブジェクトに <code>[Symbol.asyncIterator]</code> プロパティを設定することで、独自の非同期イテレータを定義することができます。</p> + +<pre class="brush: js notranslate">const myAsyncIterable = { + async* [Symbol.asyncIterator]() { + yield "hello"; + yield "async"; + yield "iteration!"; + } +}; + +(async () => { + for await (const x of myAsyncIterable) { + console.log(x); + // 期待される出力: + // "hello" + // "async" + // "iteration!" + } +})(); +</pre> + +<p>API を作成するとき、非同期反復可能項目はデータのストリームやリストのような、<em>反復可能</em>なものを表すために設計されたものであり、ほとんどの状況でコールバックやイベントを完全に置き換えるものではないことに注意してください。</p> + +<h3 id="Built-in_Async_Iterables" name="Built-in_Async_Iterables">組み込みの非同期反復処理</h3> + +<p>現在のところ、デフォルトで <code>[Symbol.asyncIterator]</code> キーが設定されている組み込み JavaScript オブジェクトはありません。しかし、WHATWG Streams は非同期反復可能な最初の組み込みオブジェクトになるように設定されており、最近 <code>[Symbol.asyncIterator]</code> が仕様に組み込まれました。</p> + +<h2 id="Specifications" name="Specifications">仕様</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol.asynciterator', 'Symbol.asyncIterator')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザー実装状況</h2> + + + +<p>{{compat("javascript.builtins.Symbol.asyncIterator")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Reference/Iteration_protocols">反復処理プロトコル </a></li> + <li><a href="/ja/docs/Web/JavaScript/Reference/Statements/for-await...of">for await... of</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/symbol/description/index.html b/files/ja/web/javascript/reference/global_objects/symbol/description/index.html new file mode 100644 index 0000000000..581ebe83bd --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/description/index.html @@ -0,0 +1,66 @@ +--- +title: Symbol.prototype.description +slug: Web/JavaScript/Reference/Global_Objects/Symbol/description +tags: + - JavaScript + - Property + - Prototype + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/description +--- +<div>{{JSRef}}</div> + +<p>読み取り専用 <code><strong>description</strong></code> プロパティは、 {{JSxRef("Symbol")}} オブジェクトのオプションの説明を返す文字列です。</p> + +<div>{{EmbedInteractiveExample("pages/js/symbol-prototype-description.html")}}</div> + + + +<h2 id="解説">解説</h2> + +<p>{{JSxRef("Symbol")}} オブジェクトは、オプションの説明を使用して作成できます。これはデバッグには使用できますが、シンボル自体にはアクセスできません。 <code>Symbol.prototype.description</code> プロパティを使用して、その説明を読み取ることができます。囲んでいる "<code>Symbol()</code>" 文字列が含まれていないため、 <code>Symbol.prototype.toString()</code> とは異なります。例を参照してください。</p> + +<h2 id="例">例</h2> + +<h3 id="description_を使用する">description を使用する</h3> + +<pre class="brush: js notranslate">Symbol('desc').toString(); // "Symbol(desc)" +Symbol('desc').description; // "desc" +Symbol('').description; // "" +Symbol().description; // undefined + +// well-known symbols +Symbol.iterator.toString(); // "Symbol(Symbol.iterator)" +Symbol.iterator.description; // "Symbol.iterator" + +// global symbols +Symbol.for('foo').toString(); // "Symbol(foo)" +Symbol.for('foo').description; // "foo" + +</pre> + +<h2 id="仕様">仕様</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">仕様</th> + </tr> + <tr> + <td>{{SpecName("ESDraft", "#sec-symbol.prototype.description", "get Symbol.prototype.description")}}</td> + </tr> + </tbody> +</table> + +<h2 id="ブラウザーの互換性">ブラウザーの互換性</h2> + + + +<p>{{Compat("javascript.builtins.Symbol.description")}}</p> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li>{{JSxRef("Symbol.prototype.toString()")}}</li> + <li>Polyfill: <a href="https://npmjs.com/symbol.prototype.description">https://npmjs.com/symbol.prototype.description</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/symbol/for/index.html b/files/ja/web/javascript/reference/global_objects/symbol/for/index.html new file mode 100644 index 0000000000..2d7fff66d4 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/for/index.html @@ -0,0 +1,107 @@ +--- +title: Symbol.for() +slug: Web/JavaScript/Reference/Global_Objects/Symbol/for +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/for +--- +<div>{{JSRef}}</div> + +<p><strong><code>Symbol.for(key)</code></strong> メソッドは、引数で与えられたキーでランタイム全体のシンボルレジストリ内に存在しているシンボルを検索し、見つかった場合はそれを返します。さもなければ、新しいシンボルがこのキーでグローバルシンボルレジストリ内に生成されます。</p> + +<div>{{EmbedInteractiveExample("pages/js/symbol-for.html")}}</div> + +<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox notranslate">Symbol.for(<var>key</var>);</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><code><var>key</var></code></dt> + <dd>必須の文字列です。シンボルに対するキー(シンボルの説明のためにも使用されます)。</dd> +</dl> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p>見つかった場合は指定したキーを持つ既存のシンボルです。さもなければ新しいシンボルを作成して返します。</p> + +<h2 id="Description" name="Description">解説</h2> + +<p><code>Symbol()</code> と対照的に、<code>Symbol.for()</code> 関数はグローバルシンボルレジストリリスト内で利用可能なシンボルを生成します。<code>Symbol.for()</code> は必ずしもすべての呼び出しで新しいシンボルを生成するわけでなく、引数で与えられた <code>key</code> をもつシンボルがレジストリ内にすでに存在しているかどうか最初に調べます。存在している場合は、そのシンボルが返されます。引数で与えられたキーをもつシンボルが見つからない場合、<code>Symbol.for()</code> は新しいグローバルシンボルを生成します。</p> + +<h3 id="Global_symbol_registry" name="Global_symbol_registry">グローバルシンボルレジストリ</h3> + +<p>グローバルシンボルレジストリは次のレコード構造をもつリストで、値は空で初期化されます:</p> + +<table class="standard-table"> + <caption>グローバルシンボルレジストリ内のレコード</caption> + <tbody> + <tr> + <th>フィールド名</th> + <th>値</th> + </tr> + <tr> + <td>[[key]]</td> + <td>シンボルを識別するための文字列キー。</td> + </tr> + <tr> + <td>[[symbol]]</td> + <td>グローバルに格納されているシンボル。</td> + </tr> + </tbody> +</table> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Using_Symbol.for" name="Using_Symbol.for">Symbol.for() の使用</h3> + +<pre class="brush: js notranslate">Symbol.for('foo'); // create a new global symbol +Symbol.for('foo'); // retrieve the already created symbol + +// Same global symbol, but not locally +Symbol.for('bar') === Symbol.for('bar'); // true +Symbol('bar') === Symbol('bar'); // false + +// The key is also used as the description +var sym = Symbol.for('mario'); +sym.toString(); // "Symbol(mario)" +</pre> + +<p>グローバルシンボルキーや他の (ライブラリコードの) グローバルシンボルとの名前の衝突を避けるために、シンボルの前に接頭辞をつけると良いかもしれません。</p> + +<pre class="brush: js notranslate">Symbol.for('mdn.foo'); +Symbol.for('mdn.bar'); +</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol.for', 'Symbol.for')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Symbol.for")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Symbol.keyFor()")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/symbol/hasinstance/index.html b/files/ja/web/javascript/reference/global_objects/symbol/hasinstance/index.html new file mode 100644 index 0000000000..878bb5ea98 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/hasinstance/index.html @@ -0,0 +1,80 @@ +--- +title: Symbol.hasInstance +slug: Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance +tags: + - ECMAScript 2015 + - JavaScript + - Property + - Reference + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance +--- +<div>{{JSRef}}</div> + +<p><span class="seoSummary"><strong><code>Symbol.hasInstance</code></strong> は、コンストラクターオブジェクトが、そのインスタンスのオブジェクトとして認識されるかどうかを決定するために使用されます。このシンボルで、{{jsxref("Operators/instanceof", "instanceof")}} 演算子の動作をカスタマイズすることができます。</span></p> + +<div>{{EmbedInteractiveExample("pages/js/symbol-hasinstance.html")}}</div> + +<div class="hidden">The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</div> + +<div>{{js_property_attributes(0,0,0)}}</div> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Custom_instanceof_behavior" name="Custom_instanceof_behavior">独自のインスタンスでの動作</h3> + +<p>たとえば、次のようにして <code>instanceof</code> の独自の動作を実装することができます。</p> + +<pre class="brush: js notranslate">class MyArray { + static [Symbol.hasInstance](instance) { + return Array.isArray(instance) + } +} +console.log([] instanceof MyArray); // true +</pre> + +<pre class="brush: js notranslate">function MyArray() { } +Object.defineProperty(MyArray, Symbol.hasInstance, { + value: function(instance) { return Array.isArray(instance); } +}); +console.log([] instanceof MyArray); // true</pre> + +<h3 id="Checking_the_instance_of_an_object" name="Checking_the_instance_of_an_object">オブジェクトのインスタンスを確認する</h3> + +<p><code>instanceof</code> キーワードを使ってオブジェクトがクラスのインスタンスであるかどうかを確認するのと同じ方法で、<code>Symbol.hasInstance</code> を使って確認することもできます。</p> + +<pre class="brush: js notranslate">class Animal { + constructor() {} +} + +const cat = new Animal(); + +console.log(Animal[Symbol.hasInstance](cat)); // true +</pre> + +<h2 id="Specifications" name="Specifications">仕様</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol.hasinstance', 'Symbol.hasInstance')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、<a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Symbol.hasInstance")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Operators/instanceof", "instanceof")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/symbol/index.html b/files/ja/web/javascript/reference/global_objects/symbol/index.html new file mode 100644 index 0000000000..a4537d2808 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/index.html @@ -0,0 +1,204 @@ +--- +title: Symbol +slug: Web/JavaScript/Reference/Global_Objects/Symbol +tags: + - Class + - ECMAScript 2015 + - JavaScript + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol +--- +<div>{{JSRef}}</div> + +<p>データ型 <strong>symbol</strong> は、<a href="https://wiki.developer.mozilla.org/ja/docs/Glossary/Primitive">プリミティブデータ型</a>です。<code>Symbol()</code> 関数は、<strong>symbol</strong> 型の値を返します。これは組み込みオブジェクトを公開するための静的プロパティを持ち、グローバルシンボルレジストリを公開するための静的メソッドを持つので、組み込みオブジェクトクラスのようにも見えますが、コンストラクターとしての機能を持たず、"<code>new Symbol()</code>" はサポートされていません。</p> + +<p><code>Symbol()</code> から返されるすべてのシンボル値は一意です。シンボル値は、オブジェクトプロパティの識別子として使用できます。これがデータ型の主な利用目的ですが、不透明なデータ型の有効化や、実装サポートされている一意の識別子として機能するなど、他の利用目的も存在します。目的や使用方法に関する詳細を知りたい場合、<a href="https://developer.mozilla.org/ja/docs/Glossary/Symbol">MDN用語集:Symbol</a> を見てください。</p> + +<h2 id="Description" name="Description">説明</h2> + +<p>新しいプリミティブシンボルを生成するために、説明のためのオプション文字列とともに <code>Symbol()</code> を記述します。</p> + +<pre class="brush: js notranslate">let sym1 = Symbol() +let sym2 = Symbol('foo') +let sym3 = Symbol('foo') +</pre> + +<p>上のコードでは、3 つの新しいシンボルを作成しています。<code>Symbol('foo')</code> は文字列 <code>'foo'</code> を強制的にシンボルにしているわけではなく、毎回新しいシンボルを生成していることに注意してください。</p> + +<pre class="brush: js notranslate">Symbol('foo') === Symbol('foo') // false +</pre> + +<p>次の {{jsxref("Operators/new", "new")}} 演算子を用いた構文では、{{jsxref("TypeError")}} が投げられます。</p> + +<pre class="brush: js notranslate">let sym = new Symbol() // TypeError +</pre> + +<p>これにより、新しいシンボル値を生成する代わりに明示的な <code>Symbol</code> ラッパーオブジェクトを生成することを防ぎます。プリミティブデータ型の周りに明示的なラッパーオブジェクトを生成することは、もはや ECMAScript6 ではサポートされていません。しかし、<code>new Boolean</code> や <code>new String</code>、<code>new Number</code> のような既存のプリミティブラッパーオブジェクトは、歴史的な理由からまだ生成できます。</p> + +<p>もし本当に <code>Symbol</code> ラッパーオブジェクトを生成したいのなら、<code>Object()</code> 関数を使用できます。</p> + +<pre class="brush: js notranslate">let sym = Symbol('foo') +typeof sym // "symbol" +let symObj = Object(sym) +typeof symObj // "object" +</pre> + +<h3 id="Shared_symbols_in_the_global_symbol_registry" name="Shared_symbols_in_the_global_symbol_registry">グローバルシンボルレジストリの共有シンボル</h3> + +<p>上述の <code>Symbol()</code> 関数を使用した構文は、コードベース全体で使用できるグローバルシンボルは作成されません。ファイルを跨いでグローバルスコープのような環境でも利用可能なシンボルを作成するには、{{jsxref("Symbol.for()")}} と {{jsxref("Symbol.keyFor()")}} のメソッドを使用して、グローバルシンボルレジストリからシンボルを設定および取得します。</p> + +<h3 id="Finding_symbol_properties_on_objects" name="Finding_symbol_properties_on_objects">オブジェクトのシンボルプロパティを探す</h3> + +<p>{{jsxref("Object.getOwnPropertySymbols()")}} メソッドは、シンボルの配列を返し、与えられたオブジェクトのシンボルプロパティを見つけることができます。すべてのオブジェクトは、シンボルなしで初期化されます。そのため、オブジェクトにシンボルプロパティを設定しないかぎり、この配列は空だということに注意してください。</p> + +<h2 id="Constructor" name="Constructor">コンストラクター</h2> + +<dl> + <dt><a href="/ja/docs/Web/JavaScript/Reference/Global_Objects/Symbol/Symbol"><code>Symbol()</code></a></dt> + <dd>新しい <code>Symbol</code> オブジェクトを作成します。"<code>new Symbol()</code>" という構文をサポートしていないので、コンストラクターとしては不完全です。</dd> +</dl> + +<h2 id="Static_properties" name="Static_properties">静的プロパティ</h2> + +<dl> + <dt>{{jsxref("Symbol.asyncIterator")}}</dt> + <dd>オブジェクトのデフォルトの AsyncIterator を返すメソッド。<a href="/ja/docs/Web/JavaScript/Reference/Statements/for-await...of"><code>for await...of</code></a> によって使用されます。</dd> + <dt>{{jsxref("Symbol.hasInstance")}}</dt> + <dd>コンストラクターのオブジェクトがオブジェクトをインスタンスとして認識しているかどうかを判定するメソッド。{{jsxref("Operators/instanceof", "instanceof")}} によって使用されます。</dd> + <dt>{{jsxref("Symbol.isConcatSpreadable")}}</dt> + <dd>オブジェクトをその配列要素にフラット化する必要があるかどうかを示すブール値。{{jsxref("Array.prototype.concat()")}} によって使用されます。</dd> + <dt>{{jsxref("Symbol.iterator")}}</dt> + <dd>オブジェクトのデフォルトのイテレーターを返すメソッド。<a href="/ja/docs/Web/JavaScript/Reference/Statements/for...of"><code>for...of</code></a> によって使用されます。</dd> + <dt>{{jsxref("Symbol.match")}}</dt> + <dd>文字列と照合するメソッド。オブジェクトを正規表現として使用できるかどうかを判断するためにも使用されます。{{jsxref("String.prototype.match()")}} によって使用されます。</dd> + <dt>{{jsxref("Symbol.matchAll")}}</dt> + <dd>文字列に対する正規表現の一致を生成するイテレーターを返すメソッド。{{jsxref("String.prototype.matchAll()")}} によって使用されます。</dd> + <dt>{{jsxref("Symbol.replace")}}</dt> + <dd>文字列の一致した部分文字列を置き換えるメソッド。{{jsxref("String.prototype.replace()")}} によって使用されます。</dd> + <dt>{{jsxref("Symbol.search")}}</dt> + <dd>正規表現に一致する文字列内のインデックスを返すメソッド。{{jsxref("String.prototype.search()")}} によって使用されます。</dd> + <dt>{{jsxref("Symbol.split")}}</dt> + <dd>正規表現に一致するインデックスで文字列を分割するメソッド。{{jsxref("String.prototype.split()")}} によって使用されます。</dd> + <dt>{{jsxref("Symbol.species")}}</dt> + <dd>派生オブジェクトを作成するためのコンストラクタ関数。</dd> + <dt>{{jsxref("Symbol.toPrimitive")}}</dt> + <dd>オブジェクトをプリミティブ値に変換するメソッド。</dd> + <dt>{{jsxref("Symbol.toStringTag")}}</dt> + <dd>オブジェクトのデフォルトの説明に使用される文字列の値。{{jsxref("Object.prototype.toString()")}} によって使用されます。</dd> + <dt>{{jsxref("Symbol.unscopables")}}</dt> + <dd>自身のプロパティ名と継承されたプロパティ名が、関連付けられたオブジェクトの <code><a href="/ja/docs/Web/JavaScript/Reference/Statements/with">with</a></code> 環境バインディングから除外されているオブジェクトの値。</dd> +</dl> + +<h2 id="Static_methods" name="Static_methods">静的メソッド</h2> + +<dl> + <dt>{{jsxref("Symbol.for()", "Symbol.for(key)")}}</dt> + <dd>指定された <code><var>key</var></code> を使用して既存のシンボルを検索し、見つかればそれを返します。そうでない場合は、この <code><var>key</var></code> で グローバルシンボルレジストリに新しいシンボルが作成されます。</dd> + <dt>{{jsxref("Symbol.keyFor", "Symbol.keyFor(sym)")}}</dt> + <dd>指定したシンボルのグローバルシンボルレジストリから共有シンボルキーを取得します。</dd> +</dl> + +<h2 id="Instance_properties" name="Instance_properties">インスタンスプロパティ</h2> + +<dl> + <dt>{{jsxref("Symbol.prototype.description")}}</dt> + <dd>シンボルの説明を含む読み取り専用の文字列。</dd> +</dl> + +<h2 id="Instance_methods" name="Instance_methods">インスタンスメソッド</h2> + +<dl> + <dt>{{jsxref("Symbol.prototype.toSource()")}}</dt> + <dd>{{jsxref("Global_Objects/Symbol", "Symbol")}} オブジェクトのソースを含む文字列を返します。{{jsxref("Object.prototype.toSource()")}} メソッドを上書きします。</dd> + <dt>{{jsxref("Symbol.prototype.toString()")}}</dt> + <dd>シンボルの説明を含む文字列を返します。{{jsxref("Object.prototype.toString()")}} メソッドを上書きします。</dd> + <dt>{{jsxref("Symbol.prototype.valueOf()")}}</dt> + <dd>{{jsxref("Symbol")}} オブジェクトのプリミティブ値を返します。{{jsxref("Object.prototype.valueOf()")}} メソッドを上書きします。</dd> + <dt>{{jsxref("Symbol.prototype.@@toPrimitive()", "Symbol.prototype[@@toPrimitive]")}}</dt> + <dd>{{jsxref("Symbol")}} オブジェクトのプリミティブ値を返します。</dd> +</dl> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Using_the_typeof_operator_with_symbols" name="Using_the_typeof_operator_with_symbols">シンボルと一緒に <code>typeof</code> 演算子を使用する</h3> + +<p>{{jsxref("Operators/typeof", "typeof")}} 演算子は、シンボルを識別するために役立ちます。</p> + +<pre class="brush: js notranslate">typeof Symbol() === 'symbol' +typeof Symbol('foo') === 'symbol' +typeof Symbol.iterator === 'symbol' +</pre> + +<h3 id="Symbol_type_conversions" name="Symbol_type_conversions">シンボルの型変換</h3> + +<p>シンボルの型変換作業を行うとき、いくつかの点に注意してください。</p> + +<ul> + <li>シンボルを数値に変換しようとすると、{{jsxref("TypeError")}} が投げられます(例: <code>+<var>sym</var></code> または <code><var>sym</var> | 0</code> )。</li> + <li>緩い等価演算子を使うとき、<code>Object(<var>sym</var>) == <var>sym</var></code> は <code>true</code> を返します。</li> + <li><code>Symbol('foo') + 'bar'</code> は {{jsxref("TypeError")}}(シンボルを文字列に変換できません)を投げます。これは新しい文字列プロパティ名を暗黙的に生成することを防ぎます。</li> + <li><a href="/ja/docs/Web/JavaScript/Reference/Global_Objects/String#String_conversion">"安全な" <code>String(<var>sym</var>)</code> 変換</a>はシンボルとともに {{jsxref("Symbol.prototype.toString()")}} を呼び出したかのように動作しますが、<code>new String(<var>sym</var>)</code> は TypeError を投げることに注意してください。</li> +</ul> + +<h3 id="Symbols_and_for...in_iteration" name="Symbols_and_for...in_iteration">シンボルと <code>for...in</code> による反復</h3> + +<p>シンボルは <code><a href="/ja/docs/Web/JavaScript/Reference/Statements/for...in">for...in</a></code> よる反復からは取得できません。加えて、{{jsxref("Object.getOwnPropertyNames()")}} はシンボルオブジェクトプロパティを返しません、それらを取得するために {{jsxref("Object.getOwnPropertySymbols()")}} を使うことができます。</p> + +<pre class="brush: js notranslate">let obj = {} + +obj[Symbol('a')] = 'a' +obj[Symbol.for('b')] = 'b' +obj['c'] = 'c' +obj.d = 'd' + +for (let i in obj) { + console.log(i) // logs "c" and "d" +}</pre> + +<h3 id="Symbols_and_JSON.stringify" name="Symbols_and_JSON.stringify()">シンボルと <code>JSON.stringify()</code></h3> + +<p><code>JSON.stringify()</code> を使用するとき、シンボルをキーとしたプロパティは完全に無視されます。</p> + +<pre class="brush: js notranslate">JSON.stringify({[Symbol('foo')]: 'foo'}) +// '{}' +</pre> + +<p>詳しくは {{jsxref("JSON.stringify()")}} を見てください。</p> + +<h3 id="Symbol_wrapper_objects_as_property_keys" name="Symbol_wrapper_objects_as_property_keys">プロパティキーとしてのシンボルラッパーオブジェクト</h3> + +<p>シンボルラッパーオブジェクトがプロパティキーとして使用されている場合、このオブジェクトはそのラップされたシンボルを強制的に使用します。</p> + +<pre class="brush: js notranslate">let sym = Symbol('foo') +let obj = {[sym]: 1} +obj[sym] // 1 +obj[Object(sym)] // still 1 +</pre> + +<h2 id="Specifications" name="Specifications">仕様</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">仕様書</th> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol-objects', 'Symbol')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザー実装状況</h2> + + + +<p>{{Compat("javascript.builtins.Symbol")}}</p> + +<h2 id="See_also" name="See_also">関連項目</h2> + +<ul> + <li><a href="/ja/docs/Glossary/Symbol">用語集: Symbol</a></li> + <li>{{jsxref("Operators/typeof", "typeof")}}</li> + <li><a href="/ja/docs/Web/JavaScript/Data_structures">データ型とデータ構造</a></li> + <li><a href="https://hacks.mozilla.org/2015/06/es6-in-depth-symbols/">"ES6 In Depth: Symbols" on hacks.mozilla.org</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/symbol/isconcatspreadable/index.html b/files/ja/web/javascript/reference/global_objects/symbol/isconcatspreadable/index.html new file mode 100644 index 0000000000..d67b61c1b5 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/isconcatspreadable/index.html @@ -0,0 +1,98 @@ +--- +title: Symbol.isConcatSpreadable +slug: Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable +tags: + - ECMAScript 2015 + - JavaScript + - Property + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable +--- +<div>{{JSRef}}</div> + +<p><strong><code>Symbol.isConcatSpreadable</code></strong> は、{{jsxref("Array.prototype.concat()")}} メソッドを使用してオブジェクトを配列の要素に平坦化する場合の設定として使用されます。</p> + +<div>{{EmbedInteractiveExample("pages/js/symbol-isconcatspreadable.html")}}</div> + + + +<h2 id="Description" name="Description">説明</h2> + +<p><code>@@isConcatSpreadable</code> シンボル(<code>Symbol.isConcatSpreadable</code>)は直接、または継承されたプロパティとして定義でき、その値は boolean です。これは、配列や配列状のオブジェクトの振る舞いを制御します:</p> + +<ul> + <li>配列オブジェクトにとって、既定の動作は要素の展開(平坦化)です。<code>Symbol.isConcatSpreadable</code> はこれらの場合に平坦化を避けます。</li> + <li>配列状のオブジェクトにとって、既定の動作は展開や平坦化を行いません。<code>Symbol.isConcatSpreadable</code> はこれらの場合に平坦化を強制します。</li> +</ul> + +<p>{{js_property_attributes(0,0,0)}}</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Arrays" name="Arrays">配列</h3> + +<p>既定で、{{jsxref("Array.prototype.concat()")}} は配列を次の結果のように展開(平坦化)します:</p> + +<pre class="brush: js notranslate">let alpha = ['a', 'b', 'c'], +let numeric = [1, 2, 3] + +let alphaNumeric = alpha.concat(numeric) + +console.log(alphaNumeric) // Result: ['a', 'b', 'c', 1, 2, 3] +</pre> + +<p><code>Symbol.isConcatSpreadable</code> を <code>false</code> に設定した場合、既定の動作を使用できなくなります:</p> + +<pre class="brush: js notranslate">let alpha = ['a', 'b', 'c'], +let numeric = [1, 2, 3] + +numeric[Symbol.isConcatSpreadable] = false +let alphaNumeric = alpha.concat(numeric) + +console.log(alphaNumeric) // Result: ['a', 'b', 'c', [1, 2, 3] ] +</pre> + +<h3 id="Array-like_objects" name="Array-like_objects">配列状のオブジェクト</h3> + +<p>配列状のオブジェクトは、既定で展開しません。<code>Symbol.isConcatSpreadable</code> 平坦化した配列を取得するには、<code>true</code> に設定する必要があります:</p> + +<pre class="brush: js notranslate">let x = [1, 2, 3] + +let fakeArray = { + [Symbol.isConcatSpreadable]: true, + length: 2, + 0: 'hello', + 1: 'world' +} + +x.concat(fakeArray) // [1, 2, 3, "hello", "world"] +</pre> + +<div class="blockIndicator note"> +<p><strong>注:</strong> <code>length</code> プロパティは、追加するオブジェクトプロパティの数を制御するために使用されます。上記の例では、<code>length:2</code> は 2 つのプロパティを追加する必要があることを示しています。</p> +</div> + +<h2 id="Specifications" name="Specifications">仕様</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">仕様書</th> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol.isconcatspreadable', 'Symbol.isconcatspreadable')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザー実装状況</h2> + + + +<p>{{Compat("javascript.builtins.Symbol.isConcatSpreadable")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Array.prototype.concat()")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/symbol/iterator/index.html b/files/ja/web/javascript/reference/global_objects/symbol/iterator/index.html new file mode 100644 index 0000000000..f1024e305d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/iterator/index.html @@ -0,0 +1,112 @@ +--- +title: Symbol.iterator +slug: Web/JavaScript/Reference/Global_Objects/Symbol/iterator +tags: + - ECMAScript 2015 + - JavaScript + - Property + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/iterator +--- +<div>{{JSRef}}</div> + +<p><strong><code>Symbol.iterator</code></strong> は、オブジェクトのデフォルトのイテレーターを指定します。<a href="/ja/docs/Web/JavaScript/Reference/Statements/for...of"><code>for...of</code></a> によって使用されます。</p> + +<div>{{EmbedInteractiveExample("pages/js/symbol-iterator.html")}}</div> + + + +<h2 id="Description" name="Description">説明</h2> + +<p>オブジェクトを反復する必要がある場合(<code>for..of</code> ループの開始時など)は常に、その <code>@@iterator</code> メソッドが引数なしで呼び出され、返された<strong>イテレーター</strong>を使用して反復される値が取得されます。</p> + +<p>一部の組み込み型にはデフォルトの反復動作がありますが、他の型( {{jsxref("Object")}} など)にはありません。<code>@@iterator</code> メソッドの組み込み型は次のとおりです。</p> + +<ul> + <li>{{jsxref("Array.@@iterator", "Array.prototype[@@iterator]()")}}</li> + <li>{{jsxref("TypedArray.@@iterator", "TypedArray.prototype[@@iterator]()")}}</li> + <li>{{jsxref("String.@@iterator", "String.prototype[@@iterator]()")}}</li> + <li>{{jsxref("Map.@@iterator", "Map.prototype[@@iterator]()")}}</li> + <li>{{jsxref("Set.@@iterator", "Set.prototype[@@iterator]()")}}</li> +</ul> + +<p>詳細については、<a href="/ja/docs/Web/JavaScript/Reference/Iteration_protocols">反復処理プロトコル</a>も参照してください。</p> + +<p>{{js_property_attributes(0,0,0)}}</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="User-defined_iterables" name="User-defined_iterables">ユーザー定義の反復可能項目</h3> + +<p>次のように独自の反復可能オブジェクトを作成できます。</p> + +<pre class="brush: js notranslate">var myIterable = {} +myIterable[Symbol.iterator] = function* () { + yield 1; + yield 2; + yield 3; +}; +[...myIterable] // [1, 2, 3] +</pre> + +<p>または、<a href="/ja/docs/Web/JavaScript/Reference/Operators/Object_initializer#Computed_property_names">計算されたプロパティ</a>を使用して、クラスやオブジェクト内で反復可能オブジェクトを直接定義できます。</p> + +<pre class="brush: js notranslate">class Foo { + *[Symbol.iterator] () { + yield 1; + yield 2; + yield 3; + } +} + +const someObj = { + *[Symbol.iterator] () { + yield 'a'; + yield 'b'; + } +} + +[...new Foo] // [ 1, 2, 3 ] +[...someObj] // [ 'a', 'b' ] +</pre> + +<h3 id="Non-well-formed_iterables" name="Non-well-formed_iterables">非整形反復処理</h3> + +<p>もし反復可能項目の <code>@@iterator</code> メソッドがイテレーターオブジェクトを返さない場合、それは非整形反復可能項目です。それを使用すると、実行時に例外が発生したり、バグが発生したりする可能性があります。</p> + +<pre class="brush: js notranslate">var nonWellFormedIterable = {} +nonWellFormedIterable[Symbol.iterator] = () => 1 +[...nonWellFormedIterable] // TypeError: [] is not a function +</pre> + +<h2 id="Specifications" name="Specifications">仕様</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol.iterator', 'Symbol.iterator')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザー実装状況</h2> + + + +<p>{{Compat("javascript.builtins.Symbol.iterator")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Reference/Iteration_protocols">反復処理プロトコル </a></li> + <li>{{jsxref("Array.@@iterator", "Array.prototype[@@iterator]()")}}</li> + <li>{{jsxref("TypedArray.@@iterator", "TypedArray.prototype[@@iterator]()")}}</li> + <li>{{jsxref("String.@@iterator", "String.prototype[@@iterator]()")}}</li> + <li>{{jsxref("Map.@@iterator", "Map.prototype[@@iterator]()")}}</li> + <li>{{jsxref("Set.@@iterator", "Set.prototype[@@iterator]()")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/symbol/keyfor/index.html b/files/ja/web/javascript/reference/global_objects/symbol/keyfor/index.html new file mode 100644 index 0000000000..e1d6ebf401 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/keyfor/index.html @@ -0,0 +1,74 @@ +--- +title: Symbol.keyFor() +slug: Web/JavaScript/Reference/Global_Objects/Symbol/keyFor +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/keyFor +--- +<div>{{JSRef}}</div> + +<p><strong><code>Symbol.keyFor(sym)</code></strong> メソッドは、指定されたシンボルについて、共有シンボルキーをグローバルシンボルレジストリから受け取ります。</p> + +<div>{{EmbedInteractiveExample("pages/js/symbol-keyfor.html")}}</div> + +<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox notranslate">Symbol.keyFor(<var>sym</var>);</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><code><var>sym</var></code></dt> + <dd>シンボル、必須。キーを探すシンボル。</dd> +</dl> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p>グローバルレジストリで見つかった場合は、与えられたシンボルのキーを表す文字列です。それ以外の場合は {{jsxref("undefined")}} です。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Using_keyFor" name="Using_keyFor">keyFor() の使用</h3> + +<pre class="brush: js notranslate">var globalSym = Symbol.for('foo'); // create a new global symbol +Symbol.keyFor(globalSym); // "foo" + +var localSym = Symbol(); +Symbol.keyFor(localSym); // undefined + +// well-known symbols are not symbols registered +// in the global symbol registry +Symbol.keyFor(Symbol.iterator) // undefined +</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol.keyfor', 'Symbol.keyFor')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Symbol.keyFor")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Symbol.for()")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/symbol/match/index.html b/files/ja/web/javascript/reference/global_objects/symbol/match/index.html new file mode 100644 index 0000000000..5f19c5f307 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/match/index.html @@ -0,0 +1,70 @@ +--- +title: Symbol.match +slug: Web/JavaScript/Reference/Global_Objects/Symbol/match +tags: + - ECMAScript 2015 + - JavaScript + - Property + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/match +--- +<div>{{JSRef}}</div> + +<p><strong><code>Symbol.match</code></strong> は、文字列に対して正規表現のマッチングを指定します。この関数は {{jsxref("String.prototype.match()")}} メソッドによって呼び出されます。</p> + +<div>{{EmbedInteractiveExample("pages/js/symbol-match.html")}}</div> + + + +<h2 id="Description" name="Description">説明</h2> + +<p>この関数は、オブジェクトが正規表現の動作をするかどうかを識別するためにも使用されます。たとえば、{{jsxref("String.prototype.startsWith()")}}, {{jsxref("String.prototype.endsWith()")}}, {{jsxref("String.prototype.includes()")}} メソッドは、最初の引数が正規表現であるかどうかを確認し、正規表現である場合は {{jsxref("TypeError")}} を投げます。ここで、<code>一致</code>記号が <code>false</code>(または<a href="/ja/docs/Glossary/Falsy">偽値</a>)に設定されている場合、そのオブジェクトが正規表現オブジェクトとして使用されることを意図していないことを示します。</p> + +<p>{{js_property_attributes(0,0,0)}}</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Disabling_the_isRegExp_check" name="Disabling_the_isRegExp_check"><code>isRegExp</code> チェックを無効にする</h3> + +<p>以下のコードは {{jsxref("TypeError")}} を投げます。</p> + +<pre class="brush: js notranslate">'/bar/'.startsWith(/bar/); + +// Throws TypeError, as /bar/ is a regular expression +// and Symbol.match is not modified.</pre> + +<p>ただし、<code>Symbol.match</code> を <code>false</code> に設定すると、(<code>match</code> プロパティを使用する)<code>isRegExp</code> チェックは、オブジェクトが正規表現オブジェクトではないことを示します。結果として、<code>startsWith</code> と <code>endsWith</code> メソッドは、TypeError を投げません。</p> + +<pre class="brush: js notranslate">var re = /foo/; +re[Symbol.match] = false; +'/foo/'.startsWith(re); // true +'/baz/'.endsWith(re); // false +</pre> + +<h2 id="Specifications" name="Specifications">仕様</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">仕様書</th> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol.match', 'Symbol.match')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザー実装状況</h2> + + + +<p>{{Compat("javascript.builtins.Symbol.match")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Symbol.replace")}}</li> + <li>{{jsxref("Symbol.search")}}</li> + <li>{{jsxref("Symbol.split")}}</li> + <li>{{jsxref("RegExp.@@match", "RegExp.prototype[@@match]()")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/symbol/matchall/index.html b/files/ja/web/javascript/reference/global_objects/symbol/matchall/index.html new file mode 100644 index 0000000000..e973cd69ba --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/matchall/index.html @@ -0,0 +1,77 @@ +--- +title: Symbol.matchAll +slug: Web/JavaScript/Reference/Global_Objects/Symbol/matchAll +tags: + - JavaScript + - Property + - Reference + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/matchAll +--- +<div>{{JSRef}}</div> + +<p><strong><code>Symbol.matchAll</code></strong> は、文字列に対する正規表現の一致を生成するイテレーターを返します。この関数は {{jsxref("String.prototype.matchAll()")}} メソッドによって呼び出されます。</p> + +<div>{{EmbedInteractiveExample("pages/js/symbol-matchall.html","shorter")}}</div> + + + +<h2 id="Description" name="Description">説明</h2> + +<div> +<p>このシンボルは {{jsxref("String.prototype.matchAll()")}}、特に {{jsxref("RegExp.@@matchAll", "RegExp.prototype[@@matchAll]()")}} で使用されます。以下の 2 つの例は同じ結果を返します。</p> + +<pre class="brush: js notranslate">'abc'.matchAll(/a/); + +/a/[Symbol.matchAll]('abc');</pre> + +<p>このメソッドは、{{jsxref("RegExp")}} サブクラス内の一致動作をカスタマイズするために存在します。</p> + +<p>{{js_property_attributes(0,0,0)}}</p> +</div> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Using_Symbol.matchAll" name="Using_Symbol.matchAll">Symbol.matchAll を使用する</h3> + +<pre class="brush: js notranslate">let re = /[0-9]+/g; +let str = '2016-01-02|2019-03-07'; + +const numbers = { + *[Symbol.matchAll] (str) { + for (const n of str.matchAll(/[0-9]+/g)) + yield n[0]; + } +}; + +console.log(Array.from(str.matchAll(numbers))); +// Array ["2016", "01", "02", "2019", "03", "07"] +</pre> + +<p>その他の例については、{{jsxref("String.prototype.matchAll()")}} と {{jsxref("RegExp.@@matchAll", "RegExp.prototype[@@matchAll]()")}} を参照してください。</p> + +<h2 id="Specifications" name="Specifications">仕様</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">仕様書</th> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol.matchall', 'Symbol.matchAll')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザー実装状況</h2> + + + +<p>{{Compat("javascript.builtins.Symbol.matchAll")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("String.prototype.matchAll()")}}</li> + <li>{{jsxref("RegExp.@@matchAll", "RegExp.prototype[@@matchAll]()")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/symbol/replace/index.html b/files/ja/web/javascript/reference/global_objects/symbol/replace/index.html new file mode 100644 index 0000000000..6e1579bd8a --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/replace/index.html @@ -0,0 +1,67 @@ +--- +title: Symbol.replace +slug: Web/JavaScript/Reference/Global_Objects/Symbol/replace +tags: + - ECMAScript 2015 + - JavaScript + - Property + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/replace +--- +<div>{{JSRef}}</div> + +<p><strong><code>Symbol.replace</code></strong> ウェルノウンシンボルは、文字列の一致した部分を置き換えるメソッドを指定します。この関数は {{jsxref("String.prototype.replace()")}} メソッドから呼び出されます。</p> + +<p>詳しくは、 {{jsxref("RegExp.@@replace", "RegExp.prototype[@@replace]()")}} と {{jsxref("String.prototype.replace()")}} を参照してください。</p> + +<div>{{EmbedInteractiveExample("pages/js/symbol-replace.html")}}</div> + +<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> + +<div>{{js_property_attributes(0,0,0)}}</div> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Using_Symbol.replace" name="Using_Symbol.replace">Symbol.replace の使用</h3> + +<pre class="brush: js notranslate">class CustomReplacer { + constructor(value) { + this.value = value; + } + [Symbol.replace](string) { + return string.replace(this.value, '#!@?'); + } +} + +console.log('football'.replace(new CustomReplacer('foo'))); +// expected output: "#!@?tball"</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol.replace', 'Symbol.replace')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Symbol.replace")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Symbol.match")}}</li> + <li>{{jsxref("Symbol.search")}}</li> + <li>{{jsxref("Symbol.split")}}</li> + <li>{{jsxref("RegExp.@@replace", "RegExp.prototype[@@replace]()")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/symbol/search/index.html b/files/ja/web/javascript/reference/global_objects/symbol/search/index.html new file mode 100644 index 0000000000..83a963dae6 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/search/index.html @@ -0,0 +1,67 @@ +--- +title: Symbol.search +slug: Web/JavaScript/Reference/Global_Objects/Symbol/search +tags: + - ECMAScript 2015 + - JavaScript + - Property + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/search +--- +<div>{{JSRef}}</div> + +<p><strong><code>Symbol.search</code></strong> はウェルノウンシンボルで、正規表現に一致する文字列内の位置を返すメソッドを指定します。この関数は {{jsxref("String.prototype.search()")}} メソッドによって呼び出されます。</p> + +<p>詳しくは、 {{jsxref("RegExp.@@search", "RegExp.prototype[@@search]()")}} と {{jsxref("String.prototype.search()")}} を参照してください。</p> + +<div>{{EmbedInteractiveExample("pages/js/symbol-search.html")}}</div> + +<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> + +<div>{{js_property_attributes(0,0,0)}}</div> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Custom_string_search" name="Custom_string_search">独自の文字列検索</h3> + +<pre class="brush: js notranslate">class caseInsensitiveSearch { + constructor(value) { + this.value = value.toLowerCase(); + } + [Symbol.search](string) { + return string.toLowerCase().indexOf(this.value); + } +} + +console.log('foobar'.search(new caseInsensitiveSearch('BaR'))); +// expected output: 3</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol.search', 'Symbol.search')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Symbol.search")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Symbol.match")}}</li> + <li>{{jsxref("Symbol.replace")}}</li> + <li>{{jsxref("Symbol.split")}}</li> + <li>{{jsxref("RegExp.@@search", "RegExp.prototype[@@search]()")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/symbol/species/index.html b/files/ja/web/javascript/reference/global_objects/symbol/species/index.html new file mode 100644 index 0000000000..c192f1b565 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/species/index.html @@ -0,0 +1,68 @@ +--- +title: Symbol.species +slug: Web/JavaScript/Reference/Global_Objects/Symbol/species +tags: + - ECMAScript 2015 + - JavaScript + - Property + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/species +--- +<div>{{JSRef}}</div> + +<p>ウェルノウンシンボルの <code><strong>Symbol.species</strong></code> は、コンストラクター関数が派生オブジェクトを生成する際に使用する関数値プロパティを指定します。</p> + +<div>{{EmbedInteractiveExample("pages/js/symbol-species.html")}}</div> + +<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> + +<h2 id="Description" name="Description">解説</h2> + +<p><code>species</code> アクセサープロパティを使用すると、オブジェクトの生成に使われるデフォルトコンストラクターを上書きすることができます。</p> + +<p>{{js_property_attributes(0,0,0)}}</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Using_species" name="Using_species">species の使用</h3> + +<p>{{jsxref("Array")}} オブジェクトを派生した配列クラス <code>MyArray</code> で返したいことがあるでしょう。例えば、デフォルトのコンストラクターを返す {{jsxref("Array.map", "map()")}} のようなメソッドを使用している場合、これらのメソッドは <code>MyArray</code> オブジェクトではなく親の <code>Array</code> オブジェクトを返したいとします。 <code>species</code> シンボルでこれを実現することができます。</p> + +<pre class="brush: js notranslate">class MyArray extends Array { + // Overwrite species to the parent Array constructor + static get [Symbol.species]() { return Array; } +} +let a = new MyArray(1,2,3); +let mapped = a.map(x => x * x); + +console.log(mapped instanceof MyArray); // false +console.log(mapped instanceof Array); // true +</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol.species', 'Symbol.species')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Symbol.species")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Map.@@species", "Map[@@species]")}}</li> + <li>{{jsxref("Set.@@species", "Set[@@species]")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/symbol/split/index.html b/files/ja/web/javascript/reference/global_objects/symbol/split/index.html new file mode 100644 index 0000000000..838b757727 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/split/index.html @@ -0,0 +1,65 @@ +--- +title: Symbol.split +slug: Web/JavaScript/Reference/Global_Objects/Symbol/split +tags: + - ECMAScript 2015 + - JavaScript + - Property + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/split +--- +<div>{{JSRef}}</div> + +<p><strong><code>Symbol.split</code></strong> ウェルノウンシンボルは、正規表現に一致する位置で文字列を分割するメソッドを指定します。この関数は {{jsxref("String.prototype.split()")}} メソッドによって呼び出されます。</p> + +<p>詳しくは、 {{jsxref("RegExp.@@split", "RegExp.prototype[@@split]()")}} と {{jsxref("String.prototype.split()")}} を参照してください。</p> + +<div>{{EmbedInteractiveExample("pages/js/symbol-split.html")}}</div> + +<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> + +<div>{{js_property_attributes(0,0,0)}}</div> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Custom_reverse_split" name="Custom_reverse_split">独自の逆方向の分割</h3> + +<pre class="brush: js notranslate">class ReverseSplit { + [Symbol.split](string) { + const array = string.split(' '); + return array.reverse(); + } +} + +console.log('Another one bites the dust'.split(new ReverseSplit())); +// expected output: [ "dust", "the", "bites", "one", "Another" ]</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol.split', 'Symbol.split')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Symbol.split")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Symbol.match")}}</li> + <li>{{jsxref("Symbol.replace")}}</li> + <li>{{jsxref("Symbol.search")}}</li> + <li>{{jsxref("RegExp.@@split", "RegExp.prototype[@@split]()")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/symbol/symbol/index.html b/files/ja/web/javascript/reference/global_objects/symbol/symbol/index.html new file mode 100644 index 0000000000..14d4c0f8a0 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/symbol/index.html @@ -0,0 +1,88 @@ +--- +title: Symbol() コンストラクター +slug: Web/JavaScript/Reference/Global_Objects/Symbol/Symbol +tags: + - Constructor + - JavaScript + - Reference + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/Symbol +--- +<div>{{JSRef}}</div> + +<p><code>Symbol()</code> コンストラクターは <strong>symbol</strong> 型の値を返しますが、 "<code>new Symbol()</code>" という構文に対応しておらず、サブクラス化を意図していないため、コンストラクターとしては不完全です。 <code>class</code> 定義の <code><a href="/ja/docs/Web/JavaScript/Reference/Classes/extends">extends</a></code> 句の値として使用することもできますが、 <code><a href="/ja/docs/Web/JavaScript/Reference/Operators/super">super</a></code> の呼び出しを行うと例外が発生します。</p> + +<div>{{EmbedInteractiveExample("pages/js/symbol-constructor.html", "taller")}}</div> + +<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox notranslate">Symbol([<var>description</var>])</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><code><var>description</var></code> {{optional_inline}}</dt> + <dd>文字列。デバッグには使用できるこのシンボルの説明ですが、シンボル自体にはアクセスできません。</dd> +</dl> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Creating_symbols" name="Creating_symbols">シンボルの作成</h3> + +<p>新しいプリミティブであるシンボルを生成するには、解説にあるように <code>Symbol()</code> を任意の文字列とともに書きます。</p> + +<pre class="brush: js notranslate">let sym1 = Symbol() +let sym2 = Symbol('foo') +let sym3 = Symbol('foo') +</pre> + +<p>上記のコードは3つの新しいシンボルを生成します。なお、 <code>Symbol("foo")</code> は <code>"foo"</code> と言う文字列を強制的に記号にするわけではないことに注意してください。毎回新しいシンボルを生成します。</p> + +<pre class="brush: js notranslate">Symbol('foo') === Symbol('foo') // false +</pre> + +<h3 id="new_Symbol...">new Symbol(...)</h3> + +<p>以下のように {{jsxref("Operators/new", "new")}} 演算子を伴う構文では、 {{jsxref("TypeError")}} が発生します。</p> + +<pre class="brush: js notranslate">let sym = new Symbol() // TypeError +</pre> + +<p>このため、新しいシンボル値の代わりに明示的なシンボルラッパーオブジェクトを作成することができず、プリミティブなデータ型の周りに明示的なラッパーオブジェクトを作成することは一般的に可能です (例えば、 <code>new Boolean</code>, <code>new String</code>, <code>new Number</code> です)。</p> + +<p>本当に <code>Symbol</code> のラッパーオブジェクトを生成したい場合は、 <code>Object()</code> 関数を使用することができます。</p> + +<pre class="brush: js notranslate">let sym = Symbol('foo'); +let symObj = Object(sym); +typeof sym // => "symbol" +typeof symObj // => "object" +</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol-constructor', 'Symbol constructor')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Symbol.Symbol")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li><a href="/ja/docs/Glossary/Symbol">用語集: Symbol データ型</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/symbol/toprimitive/index.html b/files/ja/web/javascript/reference/global_objects/symbol/toprimitive/index.html new file mode 100644 index 0000000000..ba1c96038e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/toprimitive/index.html @@ -0,0 +1,82 @@ +--- +title: Symbol.toPrimitive +slug: Web/JavaScript/Reference/Global_Objects/Symbol/toPrimitive +tags: + - ECMAScript 2015 + - JavaScript + - Property + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/toPrimitive +--- +<div>{{JSRef}}</div> + +<p><strong><code>Symbol.toPrimitive</code></strong> はシンボルで、あるオブジェクトを対応するプリミティブ値に変換するために呼び出される関数値のプロパティを指定します。</p> + +<div>{{EmbedInteractiveExample("pages/js/symbol-toprimitive.html")}}</div> + +<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> + +<h2 id="Description" name="Description">解説</h2> + +<p><code>Symbol.toPrimitive</code> プロパティにより (関数値として使用して)、オブジェクトがプリミティブ値に変換することができるようになります。関数は、プリミティブ値の結果として好ましい型を指定する文字列引数の <code><var>hint</var></code> と一緒に呼び出されます。 <code><var>hint</var></code> 引数は、 "<code>number</code>", "<code>string</code>", "<code>default</code>" のいずれかになります。</p> + +<p>{{js_property_attributes(0,0,0)}}</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Modifying_primitive_values_converted_from_an_object" name="Modifying_primitive_values_converted_from_an_object">オブジェクトから変換されたプリミティブ値の修正</h3> + +<p>次の例は <code>Symbol.toPrimitive</code> プロパティがオブジェクトから変換されたプリミティブ値を修正する方法を説明します。</p> + +<pre class="brush: js notranslate">// Symbol.toPrimitive プロパティを持たないオブジェクト。 +var obj1 = {}; +console.log(+obj1); // NaN +console.log(`${obj1}`); // "[object Object]" +console.log(obj1 + ''); // "[object Object]" + +// Symbol.toPrimitive プロパティを持つオブジェクト。 +var obj2 = { + [Symbol.toPrimitive](hint) { + if (hint == 'number') { + return 10; + } + if (hint == 'string') { + return 'hello'; + } + return true; + } +}; +console.log(+obj2); // 10 -- hint は "number" +console.log(`${obj2}`); // "hello" -- hint は "string" +console.log(obj2 + ''); // "true" -- hint は "default" +</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol.toprimitive', 'Symbol.toPrimitive')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Symbol.toPrimitive")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Date.@@toPrimitive", "Date.prototype[@@toPrimitive]")}}</li> + <li>{{jsxref("Symbol.@@toPrimitive", "Symbol.prototype[@@toPrimitive]")}}</li> + <li>{{jsxref("Object.prototype.toString()")}}</li> + <li>{{jsxref("Object.prototype.valueOf()")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/symbol/tosource/index.html b/files/ja/web/javascript/reference/global_objects/symbol/tosource/index.html new file mode 100644 index 0000000000..9e3399dd5d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/tosource/index.html @@ -0,0 +1,57 @@ +--- +title: Symbol.prototype.toSource() +slug: Web/JavaScript/Reference/Global_Objects/Symbol/toSource +tags: + - JavaScript + - Method + - Obsolete + - Prototype + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/toSource +--- +<div>{{JSRef}} {{obsolete_header}}</div> + +<p><strong><code>toSource()</code></strong> メソッドは、そのオブジェクトのソースコードを表す文字列を返します。</p> + +<p>このメソッドは、通常 JavaScript から内部的に呼び出されます。</p> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox notranslate"><var>Symbol</var>.toSource() + +var sym = Symbol() +sym.toSource()</pre> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p>そのオブジェクトのソースコードを表す文字列です。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Native_function" name="Native_function">ネイティブ関数</h3> + +<p>組込みの <code>Symbol</code> オブジェクトでは、 <code>toSource</code> はソースコードが使用できないことを表す以下の文字列を返します。</p> + +<pre class="brush:js notranslate">"function Symbol() { + [ネイティブコード] +}"</pre> + +<p><code>Symbol</code> のインスタンスでは、 <code>toSource</code> はソースコードを表す文字列を返します。</p> + +<pre class="brush: js notranslate">"Symbol()"</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<p>どの標準にも含まれていません。</p> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Symbol.toSource")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Object.prototype.toSource()")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/symbol/tostring/index.html b/files/ja/web/javascript/reference/global_objects/symbol/tostring/index.html new file mode 100644 index 0000000000..cee7287bb7 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/tostring/index.html @@ -0,0 +1,76 @@ +--- +title: Symbol.prototype.toString() +slug: Web/JavaScript/Reference/Global_Objects/Symbol/toString +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/toString +--- +<div>{{JSRef}}</div> + +<p><strong><code>toString()</code></strong> メソッドは、指定された {{jsxref("Symbol")}} オブジェクトを表す文字列を返します。</p> + +<div>{{EmbedInteractiveExample("pages/js/symbol-prototype-tostring.html")}}</div> + +<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="notranslate">Symbol().toString()</pre> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p>指定された {{jsxref("Symbol")}} オブジェクトを表す文字列です。</p> + +<h2 id="Description" name="Description">解説</h2> + +<p>{{jsxref("Symbol")}} オブジェクトは {{jsxref("Object")}} オブジェクトの <code>toString</code> メソッドをオーバーライドします。 {{jsxref("Object.prototype.toString()")}} を継承していません。 <code>Symbol</code> オブジェクトでは <code>toString</code> メソッドはオブジェクトの文字列表現を返します。</p> + +<h3 id="No_string_concatenation" name="No_string_concatenation">文字列への型変換はない</h3> + +<p>シンボルに対しては <code>toString()</code> を呼び出すことができるため、文字列への型変換はありません。</p> + +<pre class="brush: js notranslate">Symbol('foo') + 'bar' // TypeError: Can't convert symbol to string</pre> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="toString_の使用">toString() の使用</h3> + +<pre class="brush: js notranslate">Symbol('desc').toString() // "Symbol(desc)" + +// ウェルノウンシンボル +Symbol.iterator.toString() // "Symbol(Symbol.iterator) + +// グローバルシンボル +Symbol.for('foo').toString() // "Symbol(foo)" +</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol.prototype.tostring', 'Symbol.prototype.toString')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Symbol.toString")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Object.prototype.toString()")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/symbol/tostringtag/index.html b/files/ja/web/javascript/reference/global_objects/symbol/tostringtag/index.html new file mode 100644 index 0000000000..8bc44720be --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/tostringtag/index.html @@ -0,0 +1,100 @@ +--- +title: Symbol.toStringTag +slug: Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag +tags: + - ECMAScript 2015 + - JavaScript + - Property + - Reference + - Symbol + - シンボル + - プロパティ +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag +--- +<div>{{JSRef}}</div> + +<p><strong><code>Symbol.toStringTag</code></strong> ウェルノウンシンボルは、オブジェクトを説明する既定の文字列の作成に使用される文字列値のプロパティです。 {{jsxref("Object.prototype.toString()")}} メソッドによって内部的にアクセスされます。</p> + +<div>{{EmbedInteractiveExample("pages/js/symbol-tostringtag.html")}}</div> + +<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> + +<div>{{js_property_attributes(0,0,0)}}</div> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Default_tags" name="Default_tags">既定のタグ</h3> + +<pre class="brush: js notranslate">Object.prototype.toString.call('foo'); // "[object String]" +Object.prototype.toString.call([1, 2]); // "[object Array]" +Object.prototype.toString.call(3); // "[object Number]" +Object.prototype.toString.call(true); // "[object Boolean]" +Object.prototype.toString.call(undefined); // "[object Undefined]" +Object.prototype.toString.call(null); // "[object Null]" +// ... and more +</pre> + +<h3 id="Built-in_toStringTag_symbols" name="Built-in_toStringTag_symbols">組込み toStringTag シンボル</h3> + +<pre class="brush: js notranslate">Object.prototype.toString.call(new Map()); // "[object Map]" +Object.prototype.toString.call(function* () {}); // "[object GeneratorFunction]" +Object.prototype.toString.call(Promise.resolve()); // "[object Promise]" +// ... and more +</pre> + +<h3 id="Custom_classes_default_to_object_tag" name="Custom_classes_default_to_object_tag">独自クラスの既定のオブジェクトタグ</h3> + +<p>クラスを作成すると、 JavaScript は既定で "Object" というタグをつけます。</p> + +<pre class="brush: js notranslate">class ValidatorClass {} + +Object.prototype.toString.call(new ValidatorClass()); // "[object Object]" +</pre> + +<h3 id="Custom_tag_with_toStringTag" name="Custom_tag_with_toStringTag">toStringTag による独自タグ</h3> + +<p><code>toStringTag</code> を使えば、独自のタグを設定することができます。</p> + +<pre class="brush: js notranslate">class ValidatorClass { + get [Symbol.toStringTag]() { + return 'Validator'; + } +} + +Object.prototype.toString.call(new ValidatorClass()); // "[object Validator]" +</pre> + +<h3 id="toStringTag_available_on_all_DOM_prototype_objects" name="toStringTag_available_on_all_DOM_prototype_objects">すべての DOM プロトタイプオブジェクトで利用可能な toStringTag</h3> + +<p><a href="https://github.com/heycam/webidl/pull/357">WebIDL の仕様変更</a>が2020年半ばに行われた関係で、ブラウザーはすべての DOM プロトタイプオブジェクトに <code>Symbol.toStringTag</code> プロパティを追加するようになりました。例えば、{{domxref("HTMLButtonElement")}} の <code>Symbol.toStringTag</code> プロパティにアクセスするには次のようにします。</p> + +<pre class="brush: js notranslate">let test = document.createElement('button'); +test.toString(); // Returns [object HTMLButtonElement] +test[Symbol.toStringTag]; // Returns HTMLButtonElement</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol.tostringtag', 'Symbol.toStringTag')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Symbol.toStringTag")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Object.prototype.toString()")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/symbol/unscopables/index.html b/files/ja/web/javascript/reference/global_objects/symbol/unscopables/index.html new file mode 100644 index 0000000000..b4a0330273 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/unscopables/index.html @@ -0,0 +1,90 @@ +--- +title: Symbol.unscopables +slug: Web/JavaScript/Reference/Global_Objects/Symbol/unscopables +tags: + - ECMAScript 2015 + - JavaScript + - Property + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/unscopables +--- +<div>{{JSRef}}</div> + +<p><strong><code>Symbol.unscopables</code></strong> ウェルノウンシンボルは、自身のプロパティ名と継承されたプロパティ名が、関連付けられたオブジェクトの <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/with">with</a></code> 環境バインディングから除外されているオブジェクトの値を指定するために使用されます。</p> + +<div>{{EmbedInteractiveExample("pages/js/symbol-unscopables.html")}}</div> + +<div class="hidden">The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</div> + +<h2 id="Description" name="Description">解説</h2> + +<p>The <code>@@unscopables</code> シンボル (<code>Symbol.unscopables</code>) は、 <code><a href="/ja/docs/Web/JavaScript/Reference/Statements/with">with</a></code> 環境バインディングでプロパティ名が語彙的変数として公開されないようにするために、任意のオブジェクトに定義することができます。<a href="/ja/docs/Web/JavaScript/Reference/Strict_mode">厳格モード</a>を使用している場合、 <code>with</code> 文は使用できず、このシンボルも必要ないことに注意してください。</p> + +<p><code>unscopables</code> オブジェクトでプロパティを <code>true</code> に設定すると、そのプロパティは<em>スコープ不能</em>になり、語彙的スコープ変数には表示されません。プロパティを <code>false</code> に設定すると、 <code>scopable</code> になり、語彙的スコープ変数に表示されます。</p> + +<p>{{js_property_attributes(0,0,0)}}</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Scoping_in_with_statements" name="Scoping_in_with_statements">with 文内のスコープ</h3> + +<p>次のコードは、ES5 以下であれば正しく動作します。しかし、 ECMAScript 2015(ES6)以降では、{{jsxref("Array.prototype.keys()")}} メソッドが導入されました。これは、<code>with</code> 環境内で "keys" はメソッドであり変数ではないことを意味します。これが <code>unscopable</code> シンボルを導入すべき時です。ビルトインの <code>unscopables</code> 設定は、配列のメソッドのいくつかが <code>with</code> 環境のスコープに入らないようにするために、{{jsxref("Array.@@unscopables", "Array.prototype[@@unscopables]")}} として実装されています。</p> + +<pre class="brush: js notranslate">var keys = []; + +with (Array.prototype) { + keys.push('something'); +} + +Object.keys(Array.prototype[Symbol.unscopables]); +// ["copyWithin", "entries", "fill", "find", "findIndex", +// "includes", "keys", "values"] +</pre> + +<h3 id="Unscopables_in_objects" name="Unscopables_in_objects">オブジェクト内の unscopables</h3> + +<p>自分のオブジェクトに <code>unscopables</code> を設定することもできます。</p> + +<pre class="brush: js notranslate">var obj = { + foo: 1, + bar: 2 +}; + +obj[Symbol.unscopables] = { + foo: false, + bar: true +}; + +with (obj) { + console.log(foo); // 1 + console.log(bar); // ReferenceError: bar is not defined +} +</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol.unscopables', 'Symbol.unscopables')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Symbol.unscopables")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Array.@@unscopables", "Array.prototype[@@unscopables]")}}</li> + <li><code><a href="/ja/docs/Web/JavaScript/Reference/Statements/with">with</a></code> 文 (<a href="/ja/docs/Web/JavaScript/Reference/Strict_mode">厳格モード</a>では利用不可)</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/symbol/valueof/index.html b/files/ja/web/javascript/reference/global_objects/symbol/valueof/index.html new file mode 100644 index 0000000000..f3df5b0167 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/valueof/index.html @@ -0,0 +1,64 @@ +--- +title: Symbol.prototype.valueOf() +slug: Web/JavaScript/Reference/Global_Objects/Symbol/valueOf +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/valueOf +--- +<div>{{JSRef}}</div> + +<p><strong><code>valueOf()</code></strong> メソッドは、 Symbol オブジェクトのプリミティブ値を返します。</p> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="notranslate">Symbol().valueOf() +</pre> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p>指定された {{jsxref("Symbol")}} オブジェクトのプリミティブ値です。</p> + +<h2 id="Description" name="Description">解説</h2> + +<p>{{jsxref("Symbol")}} オブジェクトの <code>valueOf()</code> メソッドは、 Symbol オブジェクトのプリミティブ値を Symbol データ型として返します。</p> + +<p>JavaScript はオブジェクトをプリミティブ値に変換するために <code>valueOf()</code> メソッドを呼び出します。 <code>valueOf()</code> メソッドを自分で呼び出す必要はほとんどありません。 JavaScript は、プリミティブ値が期待されているオブジェクトに遭遇したときに、自動的にこれを呼び出します。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Using_valueOf" name="Using_valueOf">valueOf() の使用</h3> + +<pre class="brush: js notranslate">const sym = Symbol("example"); +sym === sym.valueOf(); // true +</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol.prototype.valueof', 'Symbol.prototype.valueOf')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Symbol.valueOf")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Object.prototype.valueOf()")}}</li> +</ul> |