次のような関数があるとします。
function foo(bar) {
if (bar > 1) {
return [1,2,3];
} else {
return 1;
}
}
を呼び出しfoo(1)
たとします。それが配列を返すかどうかはどうすればわかりますか?
次のような関数があるとします。
function foo(bar) {
if (bar > 1) {
return [1,2,3];
} else {
return 1;
}
}
を呼び出しfoo(1)
たとします。それが配列を返すかどうかはどうすればわかりますか?
私はこの機能を使用します:
function isArray(obj) {
return Object.prototype.toString.call(obj) === '[object Array]';
}
jQuery.isArrayの実装方法です。
この記事をチェックしてください:
if(foo(1) instanceof Array)
// You have an Array
else
// You don't
更新:以下のコメントに返信する必要があります。これは、自分で試してみないとうまくいかないと人々がまだ主張しているためです...
他の一部のオブジェクトでは、この手法は機能しません (例: "" instanceof String == false) が、これは配列では機能します。IE6、IE8、FF、Chrome、Safari でテストしました。以下にコメントする前に、試してみてください。
これが非常に信頼できる方法の1つであり、Javascriptから引用しています。O'Reillyによって公開された優れた部分です。
if (my_value && typeof my_value === 'object' && typeof my_value.length === 'number' &&
!(my_value.propertyIsEnumerable('length')) { // my_value is truly an array! }
私はそれをあなた自身の関数でラップすることを提案します:
function isarray(my_value) {
if (my_value && typeof my_value === 'object' && typeof my_value.length === 'number' &&
!(my_value.propertyIsEnumerable('length'))
{ return true; }
else { return false; }
}
ES5の時点ではありisArray
ます。
Array.isArray([]) // true
ソリューションをより一般的なものにするために、それが実際に Array オブジェクトであるかどうかは気にしない場合があります。たとえば、document.getElementsByName() は、配列のように機能するオブジェクトを返します。オブジェクトに「長さ」プロパティがある場合、「配列準拠」と見なすことができます。
function is_array_compliant(obj){
return obj && typeof obj.length != 'undefined';
}