检查对象是否为jQuery对象

2020/09/23 11:01 · javascript ·  · 0评论

有没有一种快速的方法来检查对象是jQuery对象还是本机JavaScript对象?

例:

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

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

doStuff(o);
doStuff(e);

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

符合 (typeof obj == 'jquery')

您可以使用instanceof运算符:

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

说明jQuery函数(又名$)被实现为构造函数构造函数将以new前缀调用

调用时$(foo),内部jQuery将此转换为new jQuery(foo)1JavaScript继续this在构造函数内部进行初始化,以指向的新实例jQuery,并将其属性设置为jQuery.prototype(aka jQuery.fn上的属性因此,您得到的new对象instanceof jQuerytrue


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

您还可以按如下所述使用.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! ');
}

检出instanceof运算子。

var isJqueryObject = obj instanceof jQuery

检查对象实例的最佳方法是通过instanceof运算符或使用isPrototypeOf()方法,该方法检查对象的原型是否在另一个对象的原型链中。

obj instanceof jQuery;
jQuery.prototype.isPrototypeOf(obj);

但是有时在一个文档上有多个jQuery实例的情况下它可能会失败。正如@Georgiy Ivankin所提到的:

如果我有$我当前名字空间指向jQuery2和我有一个从外部命名空间(其中一个对象$jQuery1),那我也没办法使用instanceof的检查,如果对象是一个jQuery对象

解决该问题的一种方法是在闭包IIFE中为jQuery对象添加别名

//aliases jQuery as $
(function($, undefined) {
    /*... your code */

    console.log(obj instanceof $);
    console.log($.prototype.isPrototypeOf(obj));

    /*... your code */
}(jQuery1));
//imports jQuery1

其他与解决这一问题的方法是通过询问jquery物业obj

'jquery' in obj

但是,如果您尝试使用原始值执行该检查,则会抛出错误,因此您可以通过确保objObject

'jquery' in Object(obj)

尽管前一种方法不是最安全的方法(您可以'jquery'在对象中创建属性),但是我们可以通过使用两种方法来改进验证:

if (obj instanceof jQuery || 'jquery' in Object(obj)) { }

这里的问题是,任何对象都可以将属性定义jquery为拥有属性,因此更好的方法是在原型中进行询问,并确保该对象不是nullundefined

if (obj && (obj instanceof jQuery || obj.constructor.prototype.jquery)) { }


由于
强制,该if语句将通过评估使短路&&时操作者obj是任何的falsy值(nullundefinedfalse0""),然后前进到执行其他的验证。

最后,我们可以编写一个实用程序函数:

function isjQuery(obj) {
  return (obj && (obj instanceof jQuery || obj.constructor.prototype.jquery));
}

让我们看一下:逻辑运算符和真实/错误

return el instanceof jQuery ? el.size() > 0 : (el && el.tagName);

但是,还有另一种方法可以在jQuery中检查对象。

jQuery.type(a); //this returns type of variable.

我做了例子来理解东西,jsfiddle链接

对于那些想知道一个对象是否是一个jQuery对象而没有安装jQuery的人,以下代码片段应该可以完成工作:

function isJQuery(obj) {
  // Each jquery object has a "jquery" attribute that contains the version of the lib.
  return typeof obj === "object" && obj && obj["jquery"];
}

您可以使用jquery属性检查对象是否由JQuery生成

myObject.jquery // 3.3.1

=>如果JQuery生成的对象返回JQuery版本号。=>否则返回undefined

var elArray = [];
var elObjeto = {};

elArray.constructor == Array //TRUE
elArray.constructor == Object//TALSE

elObjeto.constructor == Array//FALSE
elObjeto.constructor == Object//TRUE
本文地址:http://javascript.askforanswer.com/jianchaduixiangshifouweijqueryduixiang.html
文章标签: ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!