¿Cómo verifico si un objeto tiene una propiedad específica en JavaScript?

1488

¿Cómo verifico si un objeto tiene una propiedad específica en JavaScript?

Considerar:

x = {'key': 1};
if ( x.hasOwnProperty('key') ) {
    //Do this
}

¿Es esa la mejor manera de hacerlo?

fundas
fuente
21
Escribí una prueba jsperf con las respuestas de todos para ver cuál es la más rápida: jsperf.com/dictionary-contains-key
styfle
('propertyName' en Object)? 'property is there': 'property is not there'
Mohan Ram el
1
@styfle gracias por la prueba jsperf. iny hasOwnPropertysalió mucho más lento que los demás para mí (98% más lento). No me sorprende hasOwnPropertyser más lento, pero sí me sorprende in.
evanrmurphy

Respuestas:

1424

Estoy realmente confundido por las respuestas que se han dado, la mayoría de ellas son completamente incorrectas. Por supuesto, puede tener propiedades de objeto que tengan valores indefinidos, nulos o falsos. Por lo tanto, simplemente reducir el control de la propiedad typeof this[property]o, lo que es peor, x.keyle dará resultados completamente engañosos.

Depende de lo que estés buscando. Si desea saber si un objeto contiene físicamente una propiedad (y no proviene de algún lugar de la cadena de prototipos), entonces ese object.hasOwnPropertyes el camino a seguir. Todos los navegadores modernos lo admiten. (Faltaba en las versiones anteriores de Safari - 2.0.1 y anteriores, pero esas versiones del navegador rara vez se usan más).

Si lo que está buscando es si un objeto tiene una propiedad que es iterable (cuando itera sobre las propiedades del objeto, aparecerá), entonces hacer: prop in objectle dará el efecto deseado.

Dado que usar hasOwnPropertyes probablemente lo que desea, y teniendo en cuenta que es posible que desee un método alternativo, le presento la siguiente solución:

var obj = {
    a: undefined,
    b: null,
    c: false
};

// a, b, c all found
for ( var prop in obj ) {
    document.writeln( "Object1: " + prop );
}

function Class(){
    this.a = undefined;
    this.b = null;
    this.c = false;
}

Class.prototype = {
    a: undefined,
    b: true,
    c: true,
    d: true,
    e: true
};

var obj2 = new Class();

// a, b, c, d, e found
for ( var prop in obj2 ) {
    document.writeln( "Object2: " + prop );
}

function hasOwnProperty(obj, prop) {
    var proto = obj.__proto__ || obj.constructor.prototype;
    return (prop in obj) &&
        (!(prop in proto) || proto[prop] !== obj[prop]);
}

if ( Object.prototype.hasOwnProperty ) {
    var hasOwnProperty = function(obj, prop) {
        return obj.hasOwnProperty(prop);
    }
}

// a, b, c found in modern browsers
// b, c found in Safari 2.0.1 and older
for ( var prop in obj2 ) {
    if ( hasOwnProperty(obj2, prop) ) {
        document.writeln( "Object2 w/ hasOwn: " + prop );
    }
}

Lo anterior es una solución funcional para todos los navegadores, hasOwnPropertycon una advertencia: es incapaz de distinguir entre casos en los que hay una propiedad idéntica en el prototipo y en la instancia, simplemente supone que proviene del prototipo. Puede cambiarlo para que sea más indulgente o estricto, según su situación, pero al menos esto debería ser más útil.

John Resig
fuente
55
@grantwparks Si está creando un complemento deslizante simple y desea verificar la existencia de un elemento de opciones, entonces esto podría ser más de lo necesario. Puedes hacer algo así var w = opts.w || 100;. Pero si se encuentra en una biblioteca de algún tipo, es posible que deba ir un poco más lejos en algunas partes.
Halil Özgür
@ kralco626: Sí, hoy en día siento que es bastante seguro usar hasOwnProperty (), pero para una solución de navegador cruzado verdaderamente segura, vaya con John's.
Jacob
¿Qué pasa con el cambio temporal__proto__ a nulo? Imp. Simple: function hasOwnProperty(obj, prop) { var temp = obj.__proto__; obj.__proto__ = null; var ret = prop in obj; obj.__proto__ = temp; return ret; }( obj.constructor.prototypeDebe agregarse un caso con ).
promedio Joe
2
@Kasztan __proto__no es estándar y no funciona en algunos navegadores antiguos. E incluso con la reciente incorporación del Object.getPrototypeOfestándar dice que aún no puede cambiar el prototipo de un objeto existente.
Matt Browne
13
Un for(prop in object)bucle itera solo propiedades enumerables. Sin embargo, prop in objectverifica si objecttiene la propiedad propen algún lugar de la cadena prototípica, independientemente de si es enumerable o no.
Oriol
283

Con Underscore.js o ( incluso mejor ) lodash:

_.has(x, 'key');

Que llama Object.prototype.hasOwnProperty, pero (a) es más corto de escribir, y (b) usa "una referencia segura a hasOwnProperty" (es decir, funciona incluso si hasOwnPropertyse sobrescribe).

En particular, lodash define _.hascomo:

   function has(object, key) {
      return object ? hasOwnProperty.call(object, key) : false;
   }
   // hasOwnProperty = Object.prototype.hasOwnProperty
Brian M. Hunt
fuente
52
Supongo que es porque "agregar esta biblioteca" rara vez es una solución popular, incluso cuando la pregunta es sobre la manipulación compleja de DOM y la respuesta es "ir a usar jQuery".
Winfield Trail
11
Veo tu punto, @sudowned, gracias. Por cierto, si uno fuera reacio a incluir toda la biblioteca lodash, podría compilar subcomponentes o npm install lodash.hasexponer un módulo npm con solo una hasfunción que compila hasta 175 bytes cuando se minimiza. También es interesante lodash.has/index.jsobservar cómo funciona una biblioteca muy popular y confiable.
Brian M. Hunt
99
y lodashlas versiones funcionan con esto: .has(undefined, 'someKey') => falsemientras underscoreregresaundefined
Brad Parks
13
Para todos los que se quejan de agregar lodashcomo "otra dependencia" más: es una biblioteca bastante común (si no LA más común) para este tipo de cosas. Diviértete reinventando la rueda.
Priidu Neemre
11
Incluso si desea reinventar la rueda, verificar las ruedas existentes no es una mala idea.
AturSams
147

¿Qué pasa?

var x = {'key': 1};

if ('key' in x) {
    console.log('has');
}
Whisher
fuente
13
Solo para tener en cuenta, funciona con 'objetos' en sentido estricto, por lo que se declara como {} o se crea utilizando el constructor, no acepta matrices o primitivas. No es que el OP lo haya requerido, pero algunas otras respuestas presentan técnicas que son más amplias (trabajar con matrices, cadenas, etc.)
Danubian Sailor
@ РСТȢѸФХѾЦЧШЩЪЫЬѢѤЮѦѪѨѬѠѺѮѰѲѴ gracias por señalarlo (la respuesta aceptada no entra en detalles sobre por qué uno debería usar el inoperador o no. También tenga en cuenta que el inoperador tiene un excelente soporte de navegador IE 5.5+, Chrome 1.0+, Firefox 1.0+, Safari 3.0+ stackoverflow.com/questions/2920765/…
Adrien Be
2
El operador intambién verifica las propiedades del prototipo, mientras que solo hasOwnPropertyitera las propiedades definidas por el usuario. Referencia: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
adi518
2
'key' in x hacer el trabajo con matrices. Prueba: stackoverflow.com/questions/33592385/…
CosmoMyzrailGorynych
Parece la mejor y más corta opción
user365314
132

Nota : lo siguiente es hoy en día bastante obsoleto gracias al modo estricto, y hasOwnProperty. La solución correcta es usar el modo estricto y verificar la presencia de una propiedad usando obj.hasOwnProperty. Esta respuesta es anterior a estas dos cosas, al menos tan ampliamente implementadas (sí, es tan antigua). Tome lo siguiente como nota histórica.


Tenga en cuenta que undefined(desafortunadamente) no es una palabra reservada en JavaScript si no está utilizando el modo estricto. Por lo tanto, alguien (alguien más, obviamente) podría tener la gran idea de redefinirlo, rompiendo su código.

Por lo tanto, un método más robusto es el siguiente:

if (typeof(x.attribute) !== 'undefined')

Por otro lado, este método es mucho más detallado y también más lento. : - /

Una alternativa común es asegurarse de que en realidad no undefinedesté definida, por ejemplo, al poner el código en una función que acepte un parámetro adicional, llamado , al que no se le pasa un valor. Para asegurarse de que no se le pase un valor, puede llamarlo usted mismo de inmediato, por ejemplo:undefined

(function (undefined) {
     your code 
    if (x.attribute !== undefined)
         mode code 
})();
Konrad Rudolph
fuente
66
Es curioso, ya que void 0está definido para devolver el canónico undefined, ¿podría uno hacer x.attribute !== void 0?
Brian M. Hunt
1
Brian: No soy un experto, pero eso parece una forma inteligente de hacerlo bien.
Christopher Smith
37
Si el famoso 'alguien más' ha redefinido lo que es indefinido, creo que el mejor curso de acción sería reescribir ESE código.
Oskar Holmkratz
3
Lo mejor para tener una var indefinida sólida es trabajar dentro de un cierre y tener una firma de función inigualable:(function (undefined) { // undefined is actually undefined here })();
bgusach
1
@evanrmurphy No use eso, está muy desactualizado (vea la nota al comienzo de mi respuesta).
Konrad Rudolph
55
if (x.key !== undefined)

Armin Ronacher parece que ya me ganó , pero:

Object.prototype.hasOwnProperty = function(property) {
    return this[property] !== undefined;
};

x = {'key': 1};

if (x.hasOwnProperty('key')) {
    alert('have key!');
}

if (!x.hasOwnProperty('bar')) {
    alert('no bar!');
}

Una más seguro, pero la solución más lenta, como se ha señalado por Konrad Rudolph y Armin Ronacher sería la siguiente:

Object.prototype.hasOwnProperty = function(property) {
    return typeof this[property] !== 'undefined';
};
enobrev
fuente
2
No creo que sea lo suficientemente bueno. x.hasOwnProperty('toString') === true;
Joe Simmons
No pedir estar en desacuerdo, sino entender. ¿Hay algún punto donde x.hasOwnProperty devolvería algo más que un booleano verdadero o falso? Si no, el código publicado debería funcionar siempre. Supongo que tal vez si se anulara el método, pero confiar en el resultado nunca sería confiable a menos que conozca el método de anulación.
enobrev
1
Creo que tenemos una falta de comunicación. Quiero decir que usando tu método, diría que 'toString' es su propia propiedad, pero no lo es.
Joe Simmons
3
Object.prototypeYa tiene incorporado, correcto hasOwnProperty. Sobrescribirlo con una implementación incorrecta (1. Las propiedades pueden tener el valor undefined, 2. Esto dará falsos positivos para las propiedades heredadas) es una idea horriblemente mala. Las respuestas incorrectas pueden y deben eliminarse. No sé si podría hacerlo en septiembre del 2008 cuando vio la respuesta de Resig , así que comente para sugerir que lo haga ahora.
TJ Crowder
36

Puede usar el inoperador para verificar si la propiedad existe en un objeto:

x = {'key': 1};
alert("key" in x);

También puede recorrer todas las propiedades del objeto usando un for - inciclo y luego verificar la propiedad específica:

for (prop in x) {
    if (prop == "key") {
        //Do something
    }
}

Debe considerar si esta propiedad de objeto es enumerable o no, porque las propiedades no enumerables no se mostrarán en un for-inbucle. Además, si la propiedad enumerable sombrea una propiedad no enumerable del prototipo, no aparecerá en Internet Explorer 8 y versiones anteriores.

Si desea una lista de todas las propiedades de instancia, enumerables o no, puede usar

Object.getOwnPropertyNames(x);

Esto devolverá una matriz de nombres de todas las propiedades que existen en un objeto.

Finalmente, puede usar el operador typeof para verificar directamente el tipo de datos de la propiedad del objeto:

if (typeof x.key == "undefined") {
    alert("undefined");
}

Si la propiedad no existe en el objeto, devolverá la cadena indefinida. De lo contrario, devolverá el tipo de propiedad apropiado. Sin embargo, tenga en cuenta que esta no siempre es una forma válida de verificar si un objeto tiene una propiedad o no, ya que podría tener una propiedad que esté configurada como indefinida, en cuyo caso, el uso typeof x.keyaún devolvería verdadero (aunque la clave aún esté en el objeto).

Actualización: puede verificar si existe una propiedad comparándola con la propiedad de JavaScript no definida

if (x.key === undefined) {
    alert("undefined");
}

Esto debería funcionar a menos que la clave se haya configurado específicamente undefineden el objeto x

goonerify
fuente
Su parte de actualización es incorrecta. Por favor, eche un vistazo aquí: jsfiddle.net/sbgg04yg
Número945
Actualizado para mostrar los escenarios en los que puede fallar la comparación con la propiedad indefinida de JavaScript
goonerify
31

Veamos un poco de confusión aquí. Primero, simplifiquemos asumiendo que hasOwnPropertyya existe; Esto es cierto para la gran mayoría de los navegadores actuales en uso.

hasOwnPropertydevuelve verdadero si el nombre del atributo que se le ha pasado se ha agregado al objeto. Es completamente independiente del valor real que se le asigna, que puede ser exactamente undefined.

Por lo tanto:

var o = {}
o.x = undefined

var a = o.hasOwnProperty('x')  // a is true
var b = o.x === undefined // b is also true

Sin embargo:

var o = {}

var a = o.hasOwnProperty('x')  // a is now false
var b = o.x === undefined // b is still true

El problema es ¿qué sucede cuando un objeto en la cadena del prototipo tiene un atributo con el valor de indefinido? hasOwnPropertyserá falso por eso, y también lo será !== undefined. Todavía,for..in todavía lo incluirá en la enumeración.

La conclusión es que no hay una forma de navegador cruzado (ya que Internet Explorer no expone __prototype__) para determinar que un identificador específico no se ha adjuntado a un objeto ni a nada en su cadena de prototipos.

AnthonyWJones
fuente
24

Si está buscando una propiedad, entonces "NO". Usted quiere:

if ('prop' in obj) { }

En general, no debería importarle si la propiedad proviene o no del prototipo o del objeto.

Sin embargo, debido a que usó 'clave' en su código de muestra, parece que está tratando el objeto como un hash, en cuyo caso su respuesta tendría sentido. Todas las claves hash serían propiedades en el objeto, y evita las propiedades adicionales aportadas por el prototipo.

La respuesta de John Resig fue muy completa, pero pensé que no estaba clara. Especialmente con cuándo usar "'prop' en obj".

Gerard ONeill
fuente
1
Tenga en cuenta que el inoperador tiene un excelente soporte para el navegador IE 5.5+, Chrome 1.0+, Firefox 1.0+, Safari 3.0+ stackoverflow.com/questions/2920765/…
Adrien Be
Como se señaló en otro comentario sobre el uso del inoperador: "funciona con 'objetos' en sentido estricto, por lo que se declara como {} o se crea utilizando el constructor, no acepta matrices o primitivas. No es que el OP lo haya requerido, pero algunas otras respuestas presentan técnicas que son más amplias (funcionan con matrices, cadenas, etc.) "
Adrien Be
1
Comentando porque me han rechazado dos veces sin hacer comentarios. Pero todavía me gusta mi respuesta. Quizás quien lo hizo quería una respuesta 'integral' para todas las formas de evaluar todo tipo de propiedades ... Pero mi respuesta es conceptual y, por eso, sucinta. Re: Adrien Be, una propiedad innumerable es una que no está destinada al alcance general del usuario, por lo que conceptualmente 'in' está bien;)
Gerard ONeill
16

Para probar objetos simples use: if (obj[x] !== undefined)

Si no sabe qué tipo de objeto es, use: if (obj.hasOwnProperty(x))

Todas las demás opciones son más lentas.

Detalles

Evaluación de desempeño de 100,000,000 ciclos bajo Nodejs a las 5 opciones sugeridas por otros aquí:

function hasKey1(k,o) { return (x in obj); }
function hasKey2(k,o) { return (obj[x]); }
function hasKey3(k,o) { return (obj[x] !== undefined); }
function hasKey4(k,o) { return (typeof(obj[x]) !== 'undefined'); }
function hasKey5(k,o) { return (obj.hasOwnProperty(x)); }

La evaluación nos dice que, a menos que queramos verificar específicamente la cadena de prototipos del objeto, así como el objeto en sí, no deberíamos usar la forma común: if (X in Obj)... es entre 2 y 6 veces más lento dependiendo del caso de uso

hasKey1 execution time: 4s 510.427785ms
hasKey2 execution time: 0s 904.374806ms
hasKey3 execution time: 0s 760.336193ms
hasKey4 execution time: 0s 935.19901ms
hasKey5 execution time: 2s 148.189608ms

En pocas palabras, si su Obj no es necesariamente un objeto simple y desea evitar verificar la cadena de prototipos del objeto y asegurarse de que x es propiedad de Obj directamente, use 'if (obj.hasOwnProperty (x)) ...'.

De lo contrario, cuando se usa un objeto simple y no se preocupa por la cadena de prototipos del objeto, el uso if (typeof(obj[x]) !== 'undefined')...es la forma más segura y rápida.

Si usa un objeto simple como una tabla hash y nunca hace nada rizado, lo usaría if (obj[x])...porque me parece mucho más legible.

Que te diviertas.

davidhadas
fuente
15

Sí, lo es :) Creo que también puedes hacer Object.prototype.hasOwnProperty.call(x, 'key')lo que también debería funcionar si xtiene una propiedad llamada hasOwnProperty:)

Pero eso prueba las propiedades propias. Si desea verificar si tiene una propiedad que también se puede incluir, puede usarla typeof x.foo != 'undefined'.

Armin Ronacher
fuente
14
if (typeof x.key != "undefined") {

}

Porque

if (x.key)

falla si se x.keyresuelve en false(por ejemplo, x.key = "").

Peter Mortensen
fuente
No será correcto Pruebe el siguiente objeto const x = {key: undefined};que devolverá falso con esta solución, while x.hasOwnProperty('key')); // truey Reflect.has(x, 'key')); // true. La propiedad realmente existe, pero el valor es undefined.
marchita el
14

También puede usar el Reflectobjeto ES6 :

x = {'key': 1};
Reflect.has( x, 'key'); // returns true

La documentación sobre MDN para Reflect.hasse puede encontrar aquí .

El Reflect.has()método estático funciona como el operador in como una función.

Marchitar
fuente
10

OK, parece que tuve la respuesta correcta a menos que no desee propiedades heredadas:

if (x.hasOwnProperty('key'))

Estas son algunas otras opciones para incluir propiedades heredadas:

if (x.key) // Quick and dirty, but it does the same thing as below.

if (x.key !== undefined)
fundas
fuente
44
La advertencia x.hasOwnProperty ('clave') puede ser verdadera mientras que x.key! == undefined no es verdadera.
AnthonyWJones
44
Para var x = { key: false };el x.keymétodo sería incorrecto.
Mark K Cowan
2
si (x.key) no es correcto como si x = {key: 0}, no pasará la comprobación.
someUser
10

No haga esto object.hasOwnProperty(key)), es realmente malo porque estos métodos pueden estar sombreados por las propiedades del objeto en cuestión, considere { hasOwnProperty: false }, o el objeto puede ser un objeto nulo(Object.create(null)) .

La mejor manera es hacer Object.prototype.hasOwnProperty.call(object, key)o:

const has = Object.prototype.hasOwnProperty; // cache the lookup once, in module scope.
/* or */
import has from 'has'; // https://www.npmjs.com/package/has
// ...
console.log(has.call(object, key));
Abdullah Danyal
fuente
3
Estoy de acuerdo con este método y debería ser la respuesta aceptada, ya que es la forma más segura mientras se mantiene el rendimiento. eslint.org/docs/rules/no-prototype-builtins dice "Por ejemplo, no sería seguro para un servidor web analizar la entrada JSON de un cliente y llamar a hasOwnProperty directamente en el objeto resultante, porque un cliente malintencionado podría enviar un valor JSON como {"hasOwnProperty": 1} y hace que el servidor se bloquee ".
Arman el
7

Otra forma relativamente simple es usar Object.keys. Esto devuelve un valor arrayque significa que obtienes todas las características de una matriz.

var noInfo = {};
var info = {something: 'data'};

Object.keys(noInfo).length //returns 0 or false
Object.keys(info).length //returns 1 or true

Aunque estamos en un mundo con gran soporte para navegadores. Debido a que esta pregunta es tan antigua, pensé agregar esto: es seguro de usar a partir de JS v1.8.5

Jamie Hutber
fuente
Bien, pero ¿y si quisieras saber si la información tenía una propiedad con el nombre de otra cosa? Lo que se piensa es lo que está buscando OP.
Victorio Berra
2
Entonces lo haríasObject.keys(info).indexOf('someotherthing') !== -1
hippietrail
7

hasOwnProperty "se puede usar para determinar si un objeto tiene la propiedad especificada como propiedad directa de ese objeto; a diferencia del operador in , este método no comprueba la cadena de prototipos del objeto".

Lo más probable es que, para lo que parece su pregunta, no desee usar hasOwnProperty, que determina si la propiedad existe como adjunta directamente al objeto en sí .

Si desea determinar si la propiedad existe en la cadena de prototipos que desea utilizar, como:

if( prop in object ){ // do something }

Espero que esto ayude.

rogopag
fuente
Aparece el operador "No se puede usar 'in' para buscar 'prop' en myObject"
Victorio Berra
3

Con el riesgo de votación masiva, aquí hay otra opción para un caso específico. :)

Si desea probar un miembro en un objeto y desea saber si se ha establecido en algo diferente a:

  • ''
  • falso
  • nulo
  • indefinido
  • 0 ...

entonces puedes usar:

var foo = {};
foo.bar = "Yes, this is a proper value!";
if (!!foo.bar) {
        // member is set, do something
}
Arkod
fuente
Compacto y conveniente
Frederik Witte
A un linter no le gustará esto: eslint.org/docs/rules/no-extra-boolean-cast
Wilt
2

Solución ECMA Script 6 con reflect. Crear envoltura como:

/**
Gets an argument from array or object.
The possible outcome:
- If the key exists the value is returned.
- If no key exists the default value is returned.
- If no default value is specified an empty string is returned.
@param obj    The object or array to be searched.
@param key    The name of the property or key.
@param defVal Optional default version of the command-line parameter [default ""]
@return The default value in case of an error else the found parameter.
*/
function getSafeReflectArg( obj, key, defVal) {
   "use strict";
   var retVal = (typeof defVal === 'undefined' ? "" : defVal);
   if ( Reflect.has( obj, key) ) {
       return Reflect.get( obj, key);
   }
   return retVal;
}  // getSafeReflectArg
Daño
fuente
¿Es esta la mejor manera de hacerlo cuando estás apuntando> = ES6?
hippietrail
1
En mi opinión, es la respuesta más corta y simple, pero tal vez no sea el código de ejecución más rápido. Pero la velocidad ya no es un problema.
Daño
2

Existe un método "hasOwnProperty" en el objeto, pero no se recomienda llamar a este método directamente porque a veces el objeto es nulo o existe alguna propiedad en el objeto como: { hasOwnProperty: false }

Entonces, la mejor manera sería:

// good
var obj = {"bar": "here bar desc"}
console.log(Object.prototype.hasOwnProperty.call(obj, "bar"));

// best
const has = Object.prototype.hasOwnProperty; // cache the lookup once, in module scope.
console.log(has.call(obj, "bar"));

vikram jeet singh
fuente
2

Puede usar los siguientes enfoques:

var obj = {a:1}
console.log('a' in obj)               //1
console.log(obj.hasOwnProperty('a'))  //2
console.log(Boolean(obj.a))         //3

La diferencia entre los siguientes enfoques es la siguiente:

  1. En el primer y tercer enfoque, no solo buscamos en el objeto sino también en su cadena prototípica. Si el objeto no tiene la propiedad, pero la propiedad está presente en su cadena de prototipo, dará verdadero.

 var obj = {
      a:2,
      __proto__ :{b:2}
    }

    console.log('b' in obj)
    console.log(Boolean(obj.b))

  1. El segundo enfoque verificará solo sus propias propiedades. Ex -

var obj = {
      a:2,
      __proto__ :{b:2}
    }

    console.log(obj.hasOwnProperty('b'))

  1. La diferencia entre el primero y el tercero es que si hay una propiedad que tiene un valor indefinido, el tercer enfoque dará falso mientras que el primero dará verdadero.

var obj = {
      b : undefined
    }
    console.log(Boolean(obj.b))
    console.log('b' in obj);

Komal Bansal
fuente
1

Necesitas usar el método object.hasOwnProperty(property). Devuelve verdadero si el objeto tiene la propiedad y falso si no lo tiene.

John Anisere
fuente
-1

Si la clave que está verificando está almacenada en una variable , puede verificarla así:

x = {'key': 1};
y = 'key';
x[y];
Steven Penny
fuente
¿Cómo es esto conceptualmente diferente entonces simplemente probando x ['clave']? ¿Y cómo es eso diferente de x.key? Aparte de cuando se accede a una serie de cursos ..
Gerard ONeill
-1

Por qué complicar demasiado las cosas cuando puedes hacer:

var isProperty =  (objectname.keyname || "") ? true : false;

Simple y claro para la mayoría de los casos ...

Alex
fuente
El más simple es var isProperty = !! objectname.keyname;
John
Si el objeto es el siguiente const objectName = { keyname: false };, debería devolver verdadero, ya que keynamees una propiedad de objectname. Pero dado que el valor es falso, devolvería falso con esta lógica.
Wilt