Asumiendo que declaro
var ad = {};
¿Cómo puedo verificar si este objeto contendrá propiedades definidas por el usuario?
javascript
Ricky
fuente
fuente
Object.keys
serí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.keys
mé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
hasOwnProperty
llamada al método directamente en elObject.prototype
es 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...in
declaració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.getOwnPropertyNames
método devuelve un queArray
contiene 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.defineProperty
también está disponible en esos navegadores y en las últimas versiones de Firefox 3.7 Alpha.fuente
hasOwnProperty
propiedad, 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 utilizarObject
como 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([]) // true
Asegúrese de verificar primero: stackoverflow.com/a/22482737/1922747Si está dispuesto a usar lodash , puede usar el
some
método.Ver este pequeño ejemplo de jsbin
fuente
_.some([1, 2]) // true
Asegú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