カメリアの記事

意味があることやないことを綴ります

配列か連想配列か、いや、両方だ!

下のような何かがあったとします。これは配列でしょうか、連想配列でしょうか。

let something = [0]

確かめてみましょう。下のようになりました。

console.log(typeof something)            // object
console.log(something instanceof Array)  // true
console.log(something instanceof Object) // true
console.log(Array.isArray(something))    // true

これは配列であると同時に連想配列である、ということになるのではないでしょうか。そもそも Array は Object 系列の存在のようです。下のようになります。

console.log(Array instanceof Object) // true
console.log(Object instanceof Array) // false

つまり「連想配列であり配列ではない」=「 Object であり Array ではない」ことを確かめるには下のような二つの条件のチェックが必要になるようです。

if (something instanceof Object && !(something instanceof Array)) {
  console.log("object")
}

なんか面倒ですね。もうちょっとすっきりした書き方はないんでしょうか。合ってもよさそうなんですが、必死になってググるのも面倒なので僕はこのくらいで納得しておくことにします。