6

次のような関数があるとします。

function foo(bar) {
    if (bar > 1) {
       return [1,2,3];
    } else {
       return 1;
    }
}

を呼び出しfoo(1)たとします。それが配列を返すかどうかはどうすればわかりますか?

4

5 に答える 5

16

私はこの機能を使用します:

function isArray(obj) {
  return Object.prototype.toString.call(obj) === '[object Array]';
}

jQuery.isArrayの実装方法です。

この記事をチェックしてください:

于 2009-07-29T20:34:58.783 に答える
3
if(foo(1) instanceof Array)
    // You have an Array
else
    // You don't

更新:以下のコメントに返信する必要があります。これは、自分で試してみないとうまくいかないと人々がまだ主張しているためです...

他の一部のオブジェクトでは、この手法は機能しません (例: "" instanceof String == false) が、これは配列では機能します。IE6、IE8、FF、Chrome、Safari でテストしました。以下にコメントする前に、試してみてください。

于 2009-07-29T20:32:07.217 に答える
2

これが非常に信頼できる方法の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; }
}
于 2009-07-30T18:05:10.477 に答える
2

ES5の時点ではありisArrayます。

Array.isArray([])  // true
于 2017-06-15T00:05:38.253 に答える
-1

ソリューションをより一般的なものにするために、それが実際に Array オブジェクトであるかどうかは気にしない場合があります。たとえば、document.getElementsByName() は、配列のように機能するオブジェクトを返します。オブジェクトに「長さ」プロパティがある場合、「配列準拠」と見なすことができます。

function is_array_compliant(obj){
    return obj && typeof obj.length != 'undefined';
}
于 2009-07-30T16:42:19.783 に答える