Javascriptでオブジェクトが配列かどうかを確認する最良の方法は何ですか?

StackOverflow https://stackoverflow.com/questions/1202841

質問

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

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)、しかしこれはArrayで機能します。 IE6、IE8、FF、Chrome、Safariでテストしました。 以下にコメントする前に試してみてください。

ここに、Javascriptから取った非常に信頼できる1つの方法があります。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

ソリューションをより一般的にするために、それが実際に配列オブジェクトであるかどうかは気にしないかもしれません。たとえば、document.getElementsByName()は、「次のように動作する」オブジェクトを返します。配列。 "アレイコンプライアンス"オブジェクトに「長さ」がある場合は、プロパティ。

function is_array_compliant(obj){
    return obj && typeof obj.length != 'undefined';
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top