JavaScriptのインデックスを指定するとき、 インデックスのもとになる値が実数値の場合、 Java の習慣でそのまま整数値に切り捨てられるつもりでいた。
var anArray = new Array(10); ... anArray[Math.random() * 10] += 1; ...上記のコードは期待通りに動かない。
Math.random() * 10 を Math.floor() で整数化しておく必要がある。
動作を確認してみる
インデックスに実数値を指定して、実際の動作を確認してみる。
<html> <p id="output"></p> <script> var anArray = new Array(2); anArray[0]= 100; anArray[1]= 200; anArray[0.5] = 50; var result = ""; result = "anArray[0] = " + anArray[0] + "<br>" + "anArray[1] = " + anArray[1] + "<br>" + "anArray[0.5] = " + anArray[0.5] + "<br>" + "anArray.length = " + anArray.length + "<br>"; document.getElementById("output").innerHTML = result; </script> </html>
※ <br> が全角なのは Syntax Highlighter が誤解釈してしまうため
この実行結果は以下のようになる。
anArray[0] = 100
anArray[1] = 200
anArray[0.5] = 50
anArray.length = 2
インデックスに実数を指定してセットした値はそのまま、
Array オブジェクトのプロパティとして登録されてしまう。
JavaScript で Array に値を格納する際には、 必ずインデックス値を整数化してから登録する必要がある。
もともとは、Google Apps Script ではまったのだが、 この挙動は JavaScript に起因しているものだった。
0 件のコメント:
コメントを投稿