69018


現在Chromeのextensionを作っているのですが、データを保存するのにMapを使おうと思っています。  
そこでMapのドキュメントなどを読んでみたのですがget()やset()を使う方法ばかりで、detail.intervalのようなプロパティの形で使っている例はありませんでした。しかし実際にコンソールなどで

[code]

    detail = new Map()
    detail.interval = 7
    alert(detail.interval)
    
[/code]

のように打つと書き込みや読み込みがちゃんと行われます。  
この書き方の方が楽なんですが非公式なのでしょうか？ また、chrome.storageでデータを保存するにあたって適切なのでしょうか？  
ご教授お願いします。


CC BY-SA 4.0
2020-07-27T07:51:46.590
69017
2020-07-27T08:31:04.057
2020-07-27T07:57:14.360
816
816
question
javascript chrome-extension
javascriptのMapでget()やset()を使わずプロパティの形で使っても問題ないか


いいえ．[MDNに詳しい解説があります](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Map)が，それはオブジェクトプロパティに代入しているだけであってMapとして使えていません．

[code]

    detail = new Map()
    detail.interval = 7
    detail.has('interval') // false
    detail.get('interval') // undefined
    
[/code]

* * *

また，`chrome.storage`で使用できるデータ型は`Map`ではなく`Object`です．

> Primitive values such as numbers will serialize as expected. Values with a
> typeof "object" and "function" will typically serialize to {}, with the
> exception of Array (serializes as expected), Date, and Regex (serialize
> using their String representation).  
>
> [https://developer.chrome.com/extensions/storage#:~:text=Primitive%20values,representation](https://developer.chrome.com/extensions/storage#:%7E:text=Primitive%20values,representation)

つまりは，その用途であれば単純にオブジェクト初期化子`{}`，あるいは`Object.create(null)`などを利用すればいいでしょう．


CC BY-SA 4.0
2020-07-27T08:31:04.057
69018
2020-07-27T08:31:04.057
2376
69017
answer