检查对象是否为 jQuery 对象

2022-08-29 22:37:59

有没有一种快速的方法来检查一个对象是jQuery对象还是一个原生JavaScript对象?

例:

var o = {};
var e = $('#element');

function doStuff(o) {
    if (o.selector) {
        console.log('object is jQuery');
    }
}

doStuff(o);
doStuff(e);

显然,上面的代码有效,但它不安全。您可能会向对象添加选择器键并获得相同的结果。有没有更好的方法来确保对象实际上是jQuery对象?o

符合(typeof obj == 'jquery')


答案 1

您可以使用实例的运算符:

if (obj instanceof jQuery){
    console.log('object is jQuery');
}

说明:该函数(又名)作为构造函数实现。构造函数将使用前缀调用。jQuery$new

当您调用 时,内部 jQuery 会将其转换为 1。JavaScript 继续在构造函数内部进行初始化,以指向 的新实例 ,将其属性设置为 在 上找到的属性(又名 )。因此,您得到一个对象,其中 是 。$(foo)new jQuery(foo)thisjQueryjQuery.prototypejQuery.fnnewinstanceof jQuerytrue


1它实际上是新的jQuery.prototype.init(foo):构造函数逻辑已被卸载到另一个名为init的构造函数,但概念是相同的。


答案 2

您也可以使用 .jquery 属性,如下所述:http://api.jquery.com/jquery-2/

var a = { what: "A regular JS object" },
b = $('body');

if ( a.jquery ) { // falsy, since it's undefined
    alert(' a is a jQuery object! ');    
}

if ( b.jquery ) { // truthy, since it's a string
    alert(' b is a jQuery object! ');
}