0

私は JavaScript で書いていて、説明できないこの奇妙な動作を検出しました。

for (i in bubbles){

bubbles[i].string = "some stuff!" // <- no errors here

results[0] = i - 1 
results[1] = i + 1
results[2] = parseInt(i) + 1 


}

i = 1これが起こるとき

results[0] -> 0
results[1] -> 11
results[2] -> 2

これは可能ですか?コード内の他のエラーが原因である可能性があります。上記のケースを分離しようとしましたが、必要な場合は、コード全体を次に示します

for (i in bubbles){

            if (bubbles[i].check()){

                // define which boubble has been clicked and start dragging
                bubbleDrag[2] = bubbles[i].check();
                bubbleDrag[1] = i;
                bubbleDrag[0] = true;

                // define where to check to avoid overlapping dates
                if (i != 0 && i < bubbles.length - 1){

                    bubbleDrag[3] = i - 1;
                    bubbleDrag[4] = i + 1;

                } else if (i == 0 && bubbles.lenght > 1){

                    bubbleDrag[3] = i + 1;

                } else if (i == bubbles.lenght - 1){

                    bubbleDrag[3] = i - 1;

                }

            }

        }
4

1 に答える 1

1

Javascript がコードを解釈しています。

results[0] = i - 1 
// string minus number, so javascript "assumes" you want "i" as a number

results[1] = i + 1 
// string concatenate with a number, so javascript assumes you want a concatenated string

より多くの例。

"30" - 10; // echoes number 20
"30" + 10; // echoes string "3010"

言語がこのように解釈されるのが好きな人もいれば、そうでない人もいます。私は後者に属しています。IMO、意図が明示的ではないため、文字列 + 数値はエラーをスローするはずです。緩い/厳密ではない解釈は、予期しない結果につながる可能性があります。Douglas Crockford のコードの一部を読むと、彼が広範に厳密な型比較 (===、!==) を使用していることに気付くでしょう。これが理由の一部です。

于 2013-03-20T16:37:49.320 に答える