可能性のある複製:
変数が配列かどうかを検出する方法
私は簡単な質問があります:
JavaScript関数に渡されたパラメーターが配列であるかどうかをどのように検出しますか?私がテストできるとは思わない:
if (typeof paramThatCouldBeArray == 'array')
それは可能ですか?
どうすればいいですか?
前もって感謝します。
if (param instanceof Array)
...
編集します。2016年の時点で、より多くのコーナーケースをキャッチする既製のメソッド Array.isArray
、次のように使用:
if (Array.isArray(param))
...
これは、jQuery 1.4.2が使用するアプローチです。
var toString = param.prototype.toString;
var isArray = function(obj) {
return toString.call(obj) === "[object Array]";
}
私はこれを見つけました ここ :
function isArray(obj) {
return obj.constructor == Array;
}
これも
function isArray(obj) {
return (obj.constructor.toString().indexOf(”Array”) != -1);
}
constructor
プロパティをテストできます:
if (param.constructor == Array) {
...
}
これには配列プロトタイプを持つオブジェクトが含まれますが、
function Stack() {
}
Stack.prototype = [];
彼らもコンストラクタを定義しない限り:
Stack.prototype.constructor = Stack;
または:
function Stack() {
this.constructor = Stack;
}
いくつかの 数日前 単純な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]]
内部プロパティ)。