Asumiendo que declaro
var ad = {};
¿Cómo puedo verificar si este objeto contendrá propiedades definidas por el usuario?
javascript
Ricky
fuente
fuente

Object.keyssería lo más fácil:var a = [1,2,3];a.something=4;console.log(Object.keys(a))debido a que ya es parte de ECMA 5, puede calzarlo con seguridad: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Object.defineProperty(obj, 'foo', {enumerable:false, value:'foo'}).Puede usar el
Object.keysmétodo incorporado para obtener una lista de claves en un objeto y probar su longitud.fuente
var str = "MyString"; Object.keys(str);, la consola emite 8 teclas, de 0 a 7, para cada personaje. ¿O todavía no entiendo la respuesta?¿Qué hay de hacer una función simple?
La
hasOwnPropertyllamada al método directamente en elObject.prototypees solo para agregar un poco más de seguridad , imagine lo siguiente usando unaobj.hasOwnProperty(...)llamada normal :Nota: (para el futuro) El método anterior se basa en la
for...indeclaración, y esta declaración solo itera sobre las propiedades enumerables , en el Estándar ECMAScript implementado actualmente más ampliamente (3a edición) el programador no tiene ninguna forma de crear propiedades no enumerables .Sin embargo, esto ha cambiado ahora con ECMAScript 5th Edition , y podemos crear propiedades no enumerables, no editables o no eliminables, por lo que el método anterior puede fallar , por ejemplo:
Una solución ECMAScript 5 a este problema sería:
El
Object.getOwnPropertyNamesmétodo devuelve un queArraycontiene los nombres de todas las propiedades propias de un objeto, enumerable o no , este método está siendo implementado ahora por proveedores de navegadores, ya está en Chrome 5 Beta y las últimas versiones nocturnas de WebKit.Object.definePropertytambién está disponible en esos navegadores y en las últimas versiones de Firefox 3.7 Alpha.fuente
hasOwnPropertypropiedad, la función podría fallar ... Sé que soy un poco paranoico ... pero a veces no sabes en qué tipo de entorno se usará tu código, pero sabes qué método quieres usar ...Object.prototype, no se enumera porfor...in. EntoncesisEmptyObject({toString:1})fallará. Esta es una de las razones desafortunadas que no puedes bastante utilizarObjectcomo una asignación de propósito general.Con jQuery puedes usar:
A partir de jQuery 1.4, este método verifica tanto las propiedades del objeto como las propiedades heredadas de los prototipos (ya que no utiliza hasOwnProperty).
Con ECMAScript 5th Edition en navegadores modernos (IE9 +, FF4 +, Chrome5 +, Opera12 +, Safari5 +) puede usar el método incorporado Object.keys :
O simplemente JavaScript antiguo:
fuente
Los navegadores más recientes (y node.js) admiten Object.keys () que devuelve una matriz con todas las claves en su objeto literal para que pueda hacer lo siguiente:
Soporte de navegador: Firefox 4, Chrome 5, Internet Explorer 9, Opera 12, Safari 5
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
fuente
Si está utilizando underscore.js, puede usar la función _.isEmpty :
fuente
_.isEmpty([]) // trueAsegúrese de verificar primero: stackoverflow.com/a/22482737/1922747Si está dispuesto a usar lodash , puede usar el
somemétodo.Ver este pequeño ejemplo de jsbin
fuente
_.some([1, 2]) // trueAsegúrese de verificar primero: stackoverflow.com/a/13356338/1922747Si tiene que estar seguro y buscar prototipos de objetos (algunas bibliotecas los agregan y no están allí de forma predeterminada):
fuente
Miembro significa propiedad de miembro, variable de miembro, como quiera llamarlo> _>
El código anterior devolverá TODO, incluido toString ... Si solo desea ver si el prototipo del objeto se ha extendido:
Nota A: Verificamos si el miembro del objeto ficticio tiene el mismo tipo que el miembro de nuestro objeto de prueba. Si es una extensión, el tipo de miembro de dummyobject debe ser "indefinido"
fuente
Simple, funciona en todos los navegadores, y aunque técnicamente es un bucle para todas las teclas del objeto, NO recorre todas ellas ... o hay 0 y el bucle no se ejecuta o hay algunos y se rompe después del primer uno (porque todo lo que estamos comprobando es si hay CUALQUIER ... entonces, ¿por qué continuar?)
fuente
Respuesta muy tardía, pero así es como puedes manejarlo con prototipos.
fuente
Cuando esté seguro de que el objeto es definido por el usuario, la forma más fácil de determinar si UDO está vacío, sería el siguiente código:
Aunque este método es (por naturaleza) deductivo, es el más rápido y más rápido posible.
ps:! no lo use en objetos definidos por el navegador.
fuente
Respuesta tardía, pero algunos marcos manejan los objetos como enumerables. Por lo tanto, bob.js puede hacerlo así:
fuente
Puedes usar lo siguiente:
Doble explosión búsqueda de propiedades
hasOwnProperty Esto es algo que solía usar:
Sin embargo, JavaScript decidió no proteger el nombre del método, por lo que podría ser alterado.
utilería en myObject
tipo de
Sin embargo, no comprueba si es nulo.
Creo que esta es la mejor manera.
en operador
resultado:
Aquí hay un enlace que entra en más detalles sobre el operador in: Determinar si existe una propiedad de objeto
fuente
Función ES6
Ejemplos:
fuente
¿Qué tal esto?
fuente