web-dev-qa-db-ja.com

渡されたパラメーターが配列かどうかを検出しますか? Javascript

可能性のある複製:
変数が配列かどうかを検出する方法

私は簡単な質問があります:

JavaScript関数に渡されたパラメーターが配列であるかどうかをどのように検出しますか?私がテストできるとは思わない:

if (typeof paramThatCouldBeArray == 'array') 

それは可能ですか?

どうすればいいですか?

前もって感謝します。

48
Alex
if (param instanceof Array)
    ...

編集します。2016年の時点で、より多くのコーナーケースをキャッチする既製のメソッド Array.isArray 、次のように使用:

if (Array.isArray(param))
    ...
65
Casey Chu

これは、jQuery 1.4.2が使用するアプローチです。

var toString = param.prototype.toString;
var isArray = function(obj) {
        return toString.call(obj) === "[object Array]";
    }
18
James Westgate

私はこれを見つけました ここ

function isArray(obj) {
    return obj.constructor == Array; 
}

これも

function isArray(obj) {
    return (obj.constructor.toString().indexOf(”Array”) != -1);
}
5
GerManson

constructorプロパティをテストできます:

if (param.constructor == Array) {
    ...
}

これには配列プロトタイプを持つオブジェクトが含まれますが、

function Stack() {
}
Stack.prototype = [];

彼らもコンストラクタを定義しない限り:

Stack.prototype.constructor = Stack;

または:

function Stack() {
    this.constructor = Stack;
}
1
outis

いくつかの 数日前 単純なtype detection関数を作成していました。

使用法:

//...
if (typeString(obj) == 'array') {
  //..
}

実装:

function typeString(o) {
  if (typeof o != 'object')
    return typeof o;

  if (o === null)
      return "null";
  //object, array, function, date, regexp, string, number, boolean, error
  var internalClass = Object.prototype.toString.call(o)
                                               .match(/\[object\s(\w+)\]/)[1];
  return internalClass.toLowerCase();
}

この関数の 2番目のバリアント は、ECMAScript仕様で記述されているオブジェクトタイプのみを返すため、より厳密です(可能な出力値:"object""undefined""null""function""array""date""regexp""string""number""boolean""error"[[Class]] 内部プロパティ)。

1
CMS