JavaScriptで辞書型のキーをintだと思うな

 ぼくのJSのOSSライブラリにバグが報告されたので調べていたら、タイトルのような結論が出た。「辞書型」を「連想配列」に置き換えたい人は置き換えてもらっても構わないけど、本当はなにより「オブジェクト」と書きたい。というわけで以下オブジェクトと書く。

 JSのオブジェクトのキーは、intでキーを入れても、そのキーはstringに変換される。つまり…

オブジェクトのキーに整数1があるか調べたい。
Object.keys({1:"a"}).indexOf(1);

↑ "-1"

Object.keys({1:"a"}).indexOf("1");

↑ "0"

 でも下のようなのはキャストが効くのかありだったりするみたい。
1 in {1:"a"}


 上記はブラウザではもちろんNode.jsでも。
 JSのオブジェクトのキーが整数型を使えると思っていたらいかん。千行ぐらいのライブラリを書いているのにまったく知らんかった。
comment: 0