name javascript jquery

javascript - name - Compruebe si el objeto es un objeto jQuery



jquery selector (8)

¿Existe una forma rápida de verificar si un objeto es un objeto jQuery o un objeto JavaScript nativo?

ejemplo:

var o = {}; var e = $(''#element''); function doStuff(o) { if (o.selector) { console.log(''object is jQuery''); } } doStuff(o); doStuff(e);

Obviamente, el código de arriba funciona pero no es seguro. Podrías agregar una tecla selectora al objeto o y obtener el mismo resultado. ¿Hay una mejor manera de asegurarse de que el objeto sea realmente un objeto jQuery?

Algo en línea con (typeof obj == ''jquery'')


Echa un vistazo a la instanceof operador.

var isJqueryObject = obj instanceof jQuery


La mejor manera de verificar la instancia de un objeto es a través de instanceof operator o con el método isPrototypeOf() que inspecciona si el prototipo de un objeto está en la cadena de prototipos de otro objeto.

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

Pero a veces puede fallar en el caso de varias instancias de jQuery en un documento. Como mencionó @Georgiy Ivankin:

si tengo $ en mi espacio de nombres actual que apunta a jQuery2 y tengo un objeto del espacio de nombres externo (donde $ es jQuery1 ), no tengo forma de usar instanceof para verificar si ese objeto es un objeto jQuery

Una forma de superar ese problema es mediante el alias del objeto jQuery en un closure o IIFE

//aliases jQuery as $ (function($, undefined) { /*... your code */ console.log(obj instanceof $); console.log($.prototype.isPrototypeOf(obj)); /*... your code */ }(jQuery1)); //imports jQuery1

Otra forma de superar ese problema es consultar la propiedad jquery en obj

''jquery'' in obj

Sin embargo, si intenta realizar esa comprobación con valores primitivos, se producirá un error, por lo que puede modificar la comprobación anterior asegurando que obj sea ​​un Object

''jquery'' in Object(obj)

Aunque la forma anterior no es la más segura (puede crear la propiedad ''jquery'' en un objeto), podemos mejorar la validación trabajando con ambos enfoques:

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

El problema aquí es que cualquier objeto puede definir una propiedad jquery como propia, por lo que un mejor enfoque sería preguntar en el prototipo y asegurarse de que el objeto no esté null o undefined

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

Debido a la coacción , la instrucción if se cortocircuitará al evaluar el operador && cuando obj sea ​​cualquiera de los valores falsos ( null , undefined , false , 0 , "" ) y luego proceda a realizar las otras validaciones.

Finalmente podemos escribir una función de utilidad:

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

Echemos un vistazo a: Operadores lógicos y truthy / falsy


Para aquellos que quieran saber si un objeto es un objeto jQuery sin tener instalado jQuery, el siguiente fragmento de código debería hacer el trabajo:

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


Puede utilizar el operador instanceof :

obj instanceof jQuery

Explicación : la función jQuery (aka $ ) se implementa como una función constructora . Las funciones de constructor se deben llamar con el new prefijo.

Cuando llama a $(foo) , jQuery lo traduce internamente a new jQuery(foo) 1 . JavaScript procede a inicializar this dentro de la función del constructor para apuntar a una nueva instancia de jQuery , estableciendo sus propiedades a las que se encuentran en jQuery.prototype (también jQuery.fn como jQuery.fn ). Por lo tanto, obtienes un new objeto donde instanceof jQuery es true .

1 En realidad es new jQuery.prototype.init(foo) : la lógica del constructor se ha descargado a otra función constructora llamada init , pero el concepto es el mismo.


Sin embargo, hay una forma más de verificar el objeto en jQuery.

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

He hecho un ejemplo para entender las cosas, jsfiddle link


También puede usar la propiedad .jquery como se describe aquí: 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! ''); }


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


var elArray = []; var elObjeto = {}; elArray.constructor == Array //TRUE elArray.constructor == Object//TALSE elObjeto.constructor == Array//FALSE elObjeto.constructor == Object//TRUE