1. ホーム
  2. javascript

[解決済み] JavascriptのオブジェクトをsessionStorageに保存する

2022-04-22 21:05:49

質問

SessionStorageとLocalStorageは、Webブラウザでキーと値のペアを保存することができます。値は文字列でなければならず、jsオブジェクトの保存は簡単ではありません。

var user = {'name':'John'};
sessionStorage.setItem('user', user);
var obj = sessionStorage.user; // obj='[object Object]' Not an object

現在では、オブジェクトをJSONにシリアライズし、デシリアライズしてオブジェクトを復元することで、この制限を回避することができます。しかし、Storage APIは常に setItemgetItem メソッドを使用します。

sessionStorage.setItem('user', JSON.stringify(user));
var obj = JSON.parse(sessionStorage.getItem('user')); // An object :D

この制限を回避することはできますか?

こんな感じで実行したいんだけど。

sessionStorage.user.name; // 'John'
sessionStorage.user.name = 'Mary';
sessionStorage.user.name // 'Mary'

を試してみました。 defineGetterdefineSetter というのも、すべてのプロパティを定義しなければならず、私のターゲットは将来のプロパティを知ることができないからです。

解決方法は?

Web Storage API が提供するアクセサを使用するか、ラッパー/アダプターを作成するかのどちらかです。defineGetter/defineSetter の問題からすると、 ラッパーやアダプタを書くのは面倒くさそうですね......。

正直なところ、なんと言っていいかわかりません。何が「馬鹿げた制限」なのか、ご自分の意見をもう一度見直してみてはいかがでしょうか。Web Storage APIは、キー/バリューストアとして想定されているものです。