jQuery.isEmptyObject(obj)


version 1.4 以降

解説

空のオブジェクトかどうかを判別します。
指定したオブジェクトが、プロパティを持っていないかどうかを判別し、持っていない場合はtrue、一つでも持っている場合はfalseを返します。

内部的には、for ~ in で走査できるプロパティがあるかどうかで判別しています。
Object以外の引数を指定した場合の戻り値は不定です。

引数

  • obj
    Object: 判別するオブジェクト

戻り値

  • Boolean: プロパティを持たない空オブジェクトの場合はtrue、プロパティを持つオブジェクトの場合はfalse

例1:様々な引数を指定し、結果を確認します。

$.each([{}, {prop:'aaa'}], function(i, value) {
    var res = $.isEmptyObject(value);

    $("#test_result table tr").eq(i++)
        .append($("<td>", {css: { "fontWeight": res ? "bold" : "normal" }}).text(res));
});

$.isEmptyObject({})
$.isEmptyObject({prop:'aaa'})

Object以外を渡してはいけない

jQuery.isEmptyObject()は、for ~ in で走査できるプロパティがあるかどうかを判別します。
よって、Object以外の引数には使用することができません。

例えば、Stringを渡した場合は、FireFoxとIEでは違う結果が返ります。
var str = "abc";

[Firefox 3.6.3]
jQuery.isEmptyObject(str) // false

[IE 8.0.7600]
jQuery.isEmptyObject(str) // true

FireFoxの場合は、文字列にインデックスでアクセスできます。よって上記の場合は3つのプロパティを持つため、falseを返します。
str[0] // 'a'
str[1] // 'b'
str[2] // 'c'

しかし、IEではfor ~ in で走査できるプロパティが何も無いため true を返します。