Supertrue walfo

JavaScript, isArray について

JavaScript において、配列かどうかをチェックする関数について。

きみは配列なの?

オブジェクトのタイプを返す Object.toString を使ってチェックするタイプ。

// `Underscore.js` `is.js` など
function isArray(array) {
  return Object.prototype.toString.call(array) === '[object Array]';
}
// * 実際はこんな直接的な書き方はしていない

配列なら true を返すような比較を軒並み並べるタイプ。

// 書籍『JavaScript The Good Parts』より
function isArray(array) {
  return array &&
    typeof array === 'object' &&
    typeof array.length === 'number' &&
    typeof array.splice === 'function' &&
    !(array.propertyIsEnumerable('length'));
}
// 1. nullやその他falsyな値を除外
// 2. typeof N === 'object' がtrueになるのは, オブジェクト, 配列, null
// 3. length プロパティを持っていて, それが数値型かどうか. 配列なら true になる
// 4. splice メソッドを持っているかどうか. 配列なら true になる

とは言え『JavaScript The Good Parts』でも、付録では Object.toString を使うタイプを紹介していたので、この方法がよさそう。

if (Object.prototype.toString.apply(array) === '[object Array]') {
  // array は本当に配列だ!
}

apply なのか call なのかはお好みで(引数をとらないので)。

まとめ

とりあえず、Underscore.js の記述を参考にすればよいのでは。

リンク

おわり

2015年6月11日 19:44
2015年6月13日 12:18 編集済み