From 003d875afcd8b479d98207c8de315255726fb137 Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Sun, 15 Sep 2024 16:11:15 +0900 Subject: [PATCH] =?UTF-8?q?2024/07/26=20=E6=99=82=E7=82=B9=E3=81=AE?= =?UTF-8?q?=E8=8B=B1=E8=AA=9E=E7=89=88=E3=81=AB=E5=9F=BA=E3=81=A5=E3=81=8D?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=20(#23509)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 2024/07/26 時点の英語版に基づき更新 * 2024/07/26 時点の英語版に基づき更新 --- .../symbol/isconcatspreadable/index.md | 53 +++++++++++-------- 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/files/ja/web/javascript/reference/global_objects/symbol/isconcatspreadable/index.md b/files/ja/web/javascript/reference/global_objects/symbol/isconcatspreadable/index.md index 4ea6adaee2fa81..50596ca77d7ab9 100644 --- a/files/ja/web/javascript/reference/global_objects/symbol/isconcatspreadable/index.md +++ b/files/ja/web/javascript/reference/global_objects/symbol/isconcatspreadable/index.md @@ -1,58 +1,64 @@ --- title: Symbol.isConcatSpreadable slug: Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable +l10n: + sourceCommit: 8421c0cd94fa5aa237c833ac6d24885edbc7d721 --- {{JSRef}} -**`Symbol.isConcatSpreadable`** は、{{jsxref("Array.prototype.concat()")}} メソッドを使用してオブジェクトを配列の要素に平坦化する場合の設定として使用されます。 +**`Symbol.isConcatSpreadable`** は静的データプロパティで、[ウェルノウンシンボル](/ja/docs/Web/JavaScript/Reference/Global_Objects/Symbol#ウェルノウンシンボル)である `Symbol.isConcatSpreadable` を表します。{{jsxref("Array.prototype.concat()")}} メソッドは、連結される各オブジェクトに対してこのシンボルを探し、配列風オブジェクトとして扱って配列要素を平坦化すべきかどうかを判断します。 {{EmbedInteractiveExample("pages/js/symbol-isconcatspreadable.html")}} -## 説明 +## 値 -`@@isConcatSpreadable` シンボル(`Symbol.isConcatSpreadable`)は直接、または継承されたプロパティとして定義でき、その値は boolean です。これは、配列や配列状のオブジェクトの振る舞いを制御します: +ウェルノウンシンボル `Symbol.isConcatSpreadable` です。 -- 配列オブジェクトにとって、既定の動作は要素の展開(平坦化)です。`Symbol.isConcatSpreadable` はこれらの場合に平坦化を避けます。 -- 配列状のオブジェクトにとって、既定の動作は展開や平坦化を行いません。`Symbol.isConcatSpreadable` はこれらの場合に平坦化を強制します。 +{{js_property_attributes(0, 0, 0)}} -{{js_property_attributes(0,0,0)}} +## 解説 + +`[Symbol.isConcatSpreadable]` プロパティは、直接または継承されたプロパティとして定義でき、その値は論理値です。これが配列や配列風オブジェクトの挙動を制御できます。 + +- 配列オブジェクトでは、既定の動作は要素の展開(平坦化)です。`Symbol.isConcatSpreadable` により、これらの場合に平坦化を避けることができます。 +- 配列風オブジェクトでは、既定の動作は展開や平坦化を行いません。`Symbol.isConcatSpreadable` により、これらの場合に平坦化を強制することができます。 ## 例 ### 配列 -既定で、{{jsxref("Array.prototype.concat()")}} は配列を次の結果のように展開(平坦化)します: +既定で、{{jsxref("Array.prototype.concat()")}} は配列を次の結果のように展開(平坦化)します。 ```js -let alpha = ['a', 'b', 'c'], -let numeric = [1, 2, 3] +const alpha = ["a", "b", "c"]; +const numeric = [1, 2, 3]; -let alphaNumeric = alpha.concat(numeric) +const alphaNumeric = alpha.concat(numeric); -console.log(alphaNumeric) // Result: ['a', 'b', 'c', 1, 2, 3] +console.log(alphaNumeric); // 結果: ['a', 'b', 'c', 1, 2, 3] ``` -`Symbol.isConcatSpreadable` を `false` に設定した場合、既定の動作を使用できなくなります: +`Symbol.isConcatSpreadable` を `false` に設定すると、既定の動作を無効にすることができます。 ```js -let alpha = ['a', 'b', 'c'], -let numeric = [1, 2, 3] +const alpha = ["a", "b", "c"]; +const numeric = [1, 2, 3]; -numeric[Symbol.isConcatSpreadable] = false -let alphaNumeric = alpha.concat(numeric) +numeric[Symbol.isConcatSpreadable] = false; +const alphaNumeric = alpha.concat(numeric); -console.log(alphaNumeric) // Result: ['a', 'b', 'c', [1, 2, 3] ] +console.log(alphaNumeric); // 結果: ['a', 'b', 'c', [1, 2, 3] ] ``` -### 配列状のオブジェクト +### 配列風オブジェクト -配列状のオブジェクトは、既定で展開しません。`Symbol.isConcatSpreadable` 平坦化した配列を取得するには、`true` に設定する必要があります: +配列風オブジェクトは、既定で展開されません。平坦化された配列を取得するには、`Symbol.isConcatSpreadable` を `true` に設定する必要があります。 ```js -let x = [1, 2, 3]; +const x = [1, 2, 3]; -let fakeArray = { +const fakeArray = { [Symbol.isConcatSpreadable]: true, length: 2, 0: "hello", @@ -64,14 +70,15 @@ x.concat(fakeArray); // [1, 2, 3, "hello", "world"] > **メモ:** `length` プロパティは、追加するオブジェクトプロパティの数を制御するために使用されます。上記の例では、`length:2` は 2 つのプロパティを追加する必要があることを示しています。 -## 仕様 +## 仕様書 {{Specifications}} -## ブラウザー実装状況 +## ブラウザーの互換性 {{Compat}} ## 関連情報 +- [`Symbol.isConcatSpreadable` のポリフィル (`core-js`)](https://github.com/zloirock/core-js#ecmascript-symbol) - {{jsxref("Array.prototype.concat()")}}