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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

8151閲覧

javascripでlocalStorage.setItemをつかって数値の保存、読み込みがしたいのですが、、、

himu

総合スコア6

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2015/05/14 12:40

var k=5;
var v=0;

function keyPressed( event )
{
if( event.keyCode == 32 ){
v+=1;
k+=5;
put(""+v+"");
put(""+k+"");
}else if( event.keyCode == 49 ){
if(window.sessionStorage){
var str = ""+v+"";
sessionStorage.setItem("test_key" , str);
localStorage.setItem("test_key1" , k);
}
}else if( event.keyCode == 50 ){
if(window.sessionStorage){
var str = sessionStorage.getItem("test_key");
var ss = localStorage.getItem("test_key1");
put(""+str+"");
put(""+ss+"");
k=ss;
}
}else if( event.keyCode == 51 ){
put(""+k+"");
}
}

function set() {
var k = document.getElementById("k").value;
var v = document.getElementById("v").value;
storage.setItem(k, v);
}

このようにして数値の保存をしたのですが、保存すると数値としてではなく文字として認識されてしまうのか、ssに保存した数値をkにいれ数値を足すとkの数値の後ろにくっつく形になってしまいます。
例 ss=55
K=ss
k=55 k+=5 → k=555
どうしたら数値として呼び出せるのでしょうか?
どなたか教えてもらえませんか?

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

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

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

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

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

guest

回答2

0

こんにちは。
自分も、localStorageについて詳しくはないので、調べたことを
回答します。

以下のような、簡単なHTMLとJSを作成しました。

lang

1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="UTF-8"> 5<title>9849</title> 6<script> 7if ( localStorage ) { 8 9 var x = 123; 10 11 console.log("x=" + x + ", typeof(x): " + typeof(x)); 12 13 localStorage.setItem("key", x); 14 15 var y = localStorage.getItem("key"); 16 17 console.log("y=" + y + ", typeof(y): " + typeof(y)); 18 19} 20</script> 21</head> 22<body> 23</body> 24</html>

このHTMLをChromeで表示させて、デベロッパーツールのコンソールを
みると

x=123, typeof(x): number
y=123, typeof(y): string

と出力されていました。
これを見ると、localStorageでは文字列になって保存されているの
だろうなと推測できます。この推測をもとに、W3Cのサイトで
Web Storageの仕様にあたったところ、以下のページ

4.1 The Storage interface
http://www.w3.org/TR/webstorage/#storage-0

に以下のように書いてありました。

Each Storage object provides access to a list of key/value pairs,

which are sometimes called items. Keys are strings. Any string
(including the empty string) is a valid key. Values are similarly strings.

上記の太字部分を和訳すれば、
「値もまた同様に文字列である。」
となるかと思います。

また、インタフェースの仕様にも

lang

1interface Storage { 2 readonly attribute unsigned long length; 3 DOMString? key(unsigned long index); 4 getter DOMString getItem(DOMString key); 5 setter creator void setItem(DOMString key, DOMString value); 6 deleter void removeItem(DOMString key); 7 void clear(); 8};

とあって、getItem の返す型のDOMString とは何かといえば

http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMString

For Java and ECMAScript, DOMString is bound to the String type

because both languages also use UTF-16 as their encoding.

とあるので、(ECMAScriptたる)javascriptでは、DOMStringは文字列型として

実装されているということになるでしょう。

以上をまとめて、ご質問の回答としては

数値をsetItemしても、getItemで取り出すと文字列になって返される。
なぜなら、それが仕様だから。

というものになりそうです。
従って、取り出してから、それを数値として扱いたいなら
文字列から数値への変換をする必要がある、ということに
なります。

以上参考になりましたら幸いです。

※上記は、質問を読んでから調べたことを書いているので、お詳しい方が
ご覧になって、間違いがありましたらぜひご教示ください。

投稿2015/05/14 14:21

編集2015/05/14 14:24
jun68ykt

総合スコア9058

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

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

himu

2015/05/15 10:44

回答ありがとうございます。 やはり、文字列になってしまっていたのですね 文字列を数値に変換する方法を探してみます。
guest

0

ベストアンサー

parseInt(ss, 10) でどうぞ。

投稿2015/05/14 14:09

編集2015/05/14 14:37
okayu3

総合スコア200

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

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

okayu3

2015/05/14 14:37

ごめんなさい typoしてしまいました (parseIntegerでなく parseIntでした。)。修正しました。
himu

2015/05/15 11:28

ありがとうございます。 数値に変換することができました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問