回答編集履歴

2

調整

2024/11/22 04:49

投稿

yambejp
yambejp

スコア116468

test CHANGED
@@ -13,3 +13,11 @@
13
13
  console.log([...new Set(b)]); //Array(3) [ Symbol("test"), Symbol("test"), Symbol("test") ] →おなじキーで作ってもsymbol値はことなるので3つ
14
14
  console.log([...new Set(c)]); //Array [ Symbol("test") ]→forを指定すると同じsymbolが作られるので1つ
15
15
  ```
16
+
17
+ # test
18
+ ```javascript
19
+ const hoge=Symbol.for("hoge");
20
+ localStorage.hoge=hoge;
21
+ ```
22
+ 上記、chromeでは「Uncaught TypeError: Failed to set a named property 'hoge' on 'Storage': Cannot convert a Symbol value to a string」というエラーがでます。つまりsymbol値は文字列に変換できないということです。
23
+

1

調整

2024/11/21 07:03

投稿

yambejp
yambejp

スコア116468

test CHANGED
@@ -1 +1,15 @@
1
1
  SymbolはプリミティブですがNumberでもStringでもないsymbol値なので文字列として参照することはできません
2
+ ただsymbol値同士は同じか違うか比較ができるだけです
3
+
4
+ # 参考
5
+ ```javascript
6
+ const a=new Array(3).fill(Symbol());
7
+ const b=new Array(3).fill(null).map(()=>Symbol('test'));
8
+ const c=new Array(3).fill(null).map(()=>Symbol.for('test'));
9
+ console.log(a); // symbol値が3つ
10
+ console.log(b); // symbol値が3つ
11
+ console.log(c); // symbol値が3つ
12
+ console.log([...new Set(a)]); //Array [ Symbol() ] →中身が同じsymbolなので1つしか表示されない
13
+ console.log([...new Set(b)]); //Array(3) [ Symbol("test"), Symbol("test"), Symbol("test") ] →おなじキーで作ってもsymbol値はことなるので3つ
14
+ console.log([...new Set(c)]); //Array [ Symbol("test") ]→forを指定すると同じsymbolが作られるので1つ
15
+ ```