質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

6570閲覧

javascript storage keyが存在しないことを確認したい

FLY2525

総合スコア12

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2016/09/06 09:32

編集2016/09/06 09:44

storageの使い方で疑問に思ったことをいくつか、、

①keyの副重はありうるか?
②keyが存在するところにsetItemをした場合上書きされるか
③setItem(key,);とvalueをなくしたときのgetItem(key);で取得したvalueの中身は?
④getItemで存在しないkeyを選択したときの返り値は?

わかってる内容
・Key-Value情報のsetメソッド setItem(key, value);
・Storageからのデータの取得 getItem(key);
・すべてのデータを削除 clear()
・指定された番号のキーを取得 key(n)
・Storageに保存されているデータの数を取得 length
・キーに対応したバリューを削除 removeItem(key)

①keyの副重はありうるか?
②keyが存在するところにsetItemをした場合上書きされるか
setItemの時にすでに使用しているkeyに入れようとしているとどういう挙動になりますか?
=============
番号 タイトル 内容
0 ああああ あああああ
1 いいいい いいいいい
2 うううう
=============

この状況で、
setItem(ああああ, 別の内容);
と入力した場合

=============
番号 タイトル 内容
0 ああああ あああああ
1 いいいい いいいいい
2 うううう
3 ああああ 別の内容
=============

となるのか、上書きされて

=============
番号 タイトル 内容
0 ああああ 別の内容
1 いいいい いいいいい
2 うううう
=============

となるのか疑問です、
自分がやった実験では上書きされるのですが、たまに同じ名前のkeyで別の内容ということが起こります。↓

=============
番号 タイトル 内容
0 ああああ ああああ
1 ああああ 別の内容
=============

起こるタイミングでのソースはありませんが、心当たりがあれば教えてください。

③setItem(key,);とvalueをなくしたときのgetItem(key);で取得したvalueの中身は?

javascript

1 var title1 = document.getElementById("title").value; 2 var value1 = document.getElementById("value").value; 3 edittitle = title1; 4 editvalue = value1; 5 storage.setItem(title1, value1); 6 showlist();

このようにhtmlのテキストから取得したデータをストレージに保存してるのですが、
valueをなしにしても、さらにはkeyをなしにしてもstorageに保存されています、これはどのような形でstorageに保存されてるのでしょうか?

④getItemで存在しないkeyを選択したときの返り値は?

背景、メモ帳を作ってます。
メモのタイトルをkeyに、内容をvalueに保存して管理するシステムを作りました。しかし、新規作成の時にkeyを「新規作成」のまま保存すると、「新規作成」に上書きされてしまいます。そのほか既存のkeyをタイトルにするとそのタイトル部分に上書きされてしまいます。
したがって、windowsのファイル作成のように
「新規作成」がある場合、「新規作成―2」、それもある場合、「新規作成‐3」
のようにしたいですが、そのkeyが存在しているかどうかを確認しなければこの機構は作れません。したがってgetItem(key)で返り値が「undifind」₍?₎ならばタイトルを作成するという機構を作ろうと思っています。
下今のそのコード

javascript

1 var check1 = storage.getItem(title1); 2 var check2 = storage.getItem(title1); 3 if(whatmode = 0) {//編集モードでは使用不可、新規作成モードの時のみ利用 4 for(var i = 1;check1 == undefined;i++) { 5 check1 = check2 + "-" + i; 6 //alert("今のcheck1は" + check1 + "だよ。"); 7 } 8 title1 = check1; 9 }

だいぶいくつも質問しましたが、回答お願いします。

追記上のソースの変更

javascript

1 var check = title1; 2 if(whatmode = 0) { 3 for(var i = 1;storage.getItem(check) == undefined;i++) { 4 check = title1 + "-" + i; 5 alert("今のcheckは" + check + "だよ。"); 6 title1 = check; 7 } 8 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Storage#getItem

WHATWGの仕様書を参考にしてください。

The getItem(key) method must return the current value associated with the given key. If the given key does not exist in the list associated with the object then this method must return null.

「getItem(key) メソッドは指定されたkeyに関連付けられた現在値を返さなければなりません。
指定されたkeyがリストに存在しない場合、null を返さなければなりません」

Storage#setItem

WHATWGの仕様書を参考にしてください。

If the given key does exist in the list, and its value is not equal to value, then it must have its value updated to value. If its previous value is equal to value, then the method must do nothing.

「指定されたkeyが既存リストに存在し、指定値が既存値と等しくない場合は**指定値に更新(上書き)**されなければなりません。
指定値と規定値が等しい場合、何もしてはいけません。」

従って、keyの重複はありえません

なお、setItem された key, value は Strage Interface が持つ内部リストの内に保存されます。
元となった key 値が保存された変数がメモリから解放されても Strage Interface が持つ内部リストには影響しません。
この仕組みは「オブジェクト初期化子が持つプロパティ名、プロパティ値」や「new Map が持つ key, value」の関係性と同じです。

Re: FLY2525 さん

投稿2016/09/06 12:55

think49

総合スコア18156

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FLY2525

2016/09/09 17:01

ありがとうございます、keyの重複ができないのは驚きです、Monacaで開発しているんですが、やはりその影響何ですかね、keyの重複が起こります。ですが、解決できそうなのでもしまた開発に詰まったら質問させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問