Check if object is a jQuery object
是否有快速的方法来检查对象是jquery对象还是本机javascript对象?
例子:
1 2 3 4 5 6 7 8 9 10 11 | var o = {}; var e = $('#element'); function doStuff(o) { if (o.selector) { console.log('object is jQuery'); } } doStuff(o); doStuff(e); |
显然,上面的代码有效,但不安全。您可能会向
与
您可以使用
1 | obj instanceof jQuery |
说明:
当您调用
1它实际上是
您也可以使用.jquery属性,如下所述:http://api.jquery.com/jquery-2/
1 2 3 4 5 6 7 8 9 10 | 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运算符。
1 | var isJqueryObject = obj instanceof jQuery |
检查对象实例的最佳方法是通过InstanceOf运算符或方法IsPrototypeOf(),该方法检查对象的原型是否在另一个对象的原型链中。
1 2 | obj instanceof jQuery; jQuery.prototype.isPrototypeOf(obj); |
但有时在一个文档上有多个jquery实例的情况下,它可能会失败。正如@georgiy ivankin提到的:
if I have
$ in my current namespace pointing tojQuery2 and I have an object from outer namespace (where$ isjQuery1 ) then I have no way to useinstanceof for checking if that object is ajQuery object
解决这个问题的一种方法是将jquery对象别名为闭包或IIFE
1 2 3 4 5 6 7 8 9 10 | //aliases jQuery as $ (function($, undefined) { /*... your code */ console.log(obj instanceof $); console.log($.prototype.isPrototypeOf(obj)); /*... your code */ }(jQuery1)); //imports jQuery1 |
解决这个问题的另一种方法是询问
1 | 'jquery' in obj |
但是,如果您尝试使用原语值执行该检查,它将抛出一个错误,因此您可以通过确保
1 | 'jquery' in Object(obj) |
虽然前面的方法不是最安全的(您可以在一个对象中创建
1 | if (obj instanceof jQuery || 'jquery' in Object(obj)) { } |
这里的问题是,任何对象都可以将属性
1 | if (obj && (obj instanceof jQuery || obj.constructor.prototype.jquery)) { } |
由于胁迫,当
最后,我们可以编写一个实用函数:
1 2 3 | function isjQuery(obj) { return (obj && (obj instanceof jQuery || obj.constructor.prototype.jquery)); } |
让我们看一下:逻辑运算符和truthy/falsy
但是,还有一种方法可以检查jquery中的对象。
1 | jQuery.type(a); //this returns type of variable. |
我举了个例子来理解事物,jfiddle链接
1 | return el instanceof jQuery ? el.size() > 0 : (el && el.tagName); |
对于那些想知道一个对象是否是一个没有安装jquery的jquery对象的人,下面的代码段应该完成这项工作:
1 2 3 4 | 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使用
1 | myObject.jquery // 3.3.1 |
=>如果jquery生成的对象,则返回jquery版本号。=>否则返回
1 2 3 4 5 6 7 8 | var elArray = []; var elObjeto = {}; elArray.constructor == Array //TRUE elArray.constructor == Object//TALSE elObjeto.constructor == Array//FALSE elObjeto.constructor == Object//TRUE |