2016-05-10 12 views
0
var var1; 
    var var2; 

    var1 = readCookie('cookie_name'); 

    var2 = +var1 + 1; 

    alert(var1); 
    alert(var2); 

上記のJSのスニペットは私を困惑させます。私が '+ var1'の回避策をコード化しない限り、結果は '11'でなく2(var1 = 1およびvar2 = 1と仮定)です。だから、私は追加の代わりに連結のいくつかの並べ替えを取得しているようです。私の唯一の考えは、var1がクッキーからインポートされた値であるという事実と関係があることです。それとも、JSのバグです。または私は怒っている。好きなのを選びな。Javascriptコードは、追加が予想されるときに連結を生成しますか?

+2

'var2'の値が決して(その値は' undefined')に設定されないので、 'var1'が' NaN'以外の何かになることはありません。また、 'readCookie'が何らかの形で' var2'を操作する副作用を持っていない限り、値を上書きするので、3行目は無関係ですが、あなたは実装を与えていないので、あなたは何を期待しているのか分かりません。不完全なものとして閉じる投票。 –

+0

@Matt:おそらくタイプミスで、 'var2 = readCookie(...)' ... –

+0

おそらく、私はその関数から返された値の例を見たいと思うでしょう。そうでなければまだ再現できません。 –

答えて

0

になりますが戻っていますStringintとしてvar1を取得するには

var1 = parseInt(readCookie('cookie_name')); 

をしかし、あなたは物事をクリーンアップするために以下のことを試してみたいことがあります。試してみてください。

var var1 = parseInt(readCookie('cookie_name')); 
var var2 = var1 + 1; 

alert(var1); // should be the value of the cookie or 0 
alert(var2); 

編集:編集した質問に基づいて行われた変更。 ]

+0

私はparseIntを試してみました。少なくとも私の慣習的でない+ var1メソッドと同じ結果を生み出しました。私は+ var1が健全なコードであるかどうか分からないので、私はあなたの解決策に行くでしょう。クッキーに格納されている値は文字列値であると思われます。私は問題なく何度でも私のコードでクッキーの値を使用しましたが、おそらく私は前にクッキーの内容を算術演算することを試みていませんでした。 – Poppy

0

+var2を数値変換します。 (+)オペレータ変数がtrick.So +var1+1が2になるん前にそれ以外の場合、この

var1 = readCookie('cookie_name'); 

はおそらく価値1の文字列であり、文字列のほかに&数がreadCookie('cookie_name')を推測11

+0

完全性を確認するには、単項プラス演算子のドキュメントへの参照を提供してください。 –

-1

var2を整数に解析しようとすると、問題が解決されます。

これを試してください。

var1 = paresInt(+ var2)+ 1;

+0

もう一度質問を読む必要があります。また、 'parseInt'に*番号*を渡すことには意味がありません。 'parseInt'は*文字列*を操作することになっています。 –

+0

私はこれをテストしませんでしたが、上記の@TiggerのparseIntソリューションをテストしたところ、問題を解決するようです。私が今質問する質問は、すべてのJS Cookieがデフォルトで文字列として保存されるかどうかということです。そうであれば、たとえ整数のように見えても、クッキーの内容はそうではありません。これは知っておくと便利です。 – Poppy

+0

@Poppy:はい、クッキーはテキスト/文字列です。 https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie –

0

あなたはvar1は数値表現が含まれていることを確信しているなら、あなたは使用することができます。

var2 = Number(var1) + 1; 
alert(var2); 
1

をあなたの周りvar1の元のバージョンを保持し、限り、あなたは常に1を追加しているとして、検討する必要がある場合を除き代わりの方法

var1++ 

これは値を強制的に数値に変換し、それに1を加えます。

+0

これは良い考えでした。実際のコードでテストしましたが、少なくとも私のアプリケーションでは動作しませんでした。しかし、それは数字の価値を強要しました。 – Poppy

0

ジャストチェックは数字かどうかです。 numberの場合は、numberに渡してnumberに変更します。

var var1; 
var var2; 

var1 = readCookie('cookie_name'); 

var1 = var1.isNaN()?var1:Number(var1); 

var2 = var1 + 1; //instead of your Code (+var1 + 1) 
alert(var1); 
alert(var2); 
+0

万が一isNaN(var1)を意味しましたか? 'Number(var1)' **と** '+ var1'を後で実行する点は何ですか? –

+0

私はすでにあなたのコードとしてそれを言いました – Zigri2612

+0

'var1.isNaN()'はまだ間違っています。 –