Question Comment vérifier si la propriété d'objet existe avec une variable contenant le nom de la propriété? [dupliquer]


Cette question a déjà une réponse ici:

Je vérifie l'existence d'une propriété d'objet avec une variable contenant le nom de la propriété en question.

var myObj;
myObj.prop = "exists";
var myProp = "p"+"r"+"o"+"p";

if(myObj.myProp){
    alert("yes, i have that property");
};

C'est undefined parce qu'il cherche myObj.myProp mais je veux le vérifier myObj.prop


460
2018-06-14 19:58


origine


Réponses:


var myProp = 'prop';
if(myObj.hasOwnProperty(myProp)){
    alert("yes, i have that property");
}

Ou

var myProp = 'prop';
if(myProp in myObj){
    alert("yes, i have that property");

Ou

if('prop' in myObj){
    alert("yes, i have that property");
}

900
2018-06-14 20:01



Vous pouvez utiliser hasOwnProperty, mais en fonction de la référence dont vous avez besoin citations lors de l'utilisation de cette méthode:

if (myObj.hasOwnProperty('myProp')) {
    // do something
}

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty

Une autre façon est d'utiliser dans opérateur, mais vous avez besoin citations ici aussi:

if ('myProp' in myObj) {
    // do something
}

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in


32
2018-05-10 07:22



Merci pour l'aide de tout le monde et de pousser à se débarrasser de la déclaration d'évaluation. Les variables doivent être entre parenthèses, pas la notation par points. Cela fonctionne et est propre, bon code.

Chacune de ces variables sont des variables: appChoice, underI, underObstr.

if(typeof tData.tonicdata[appChoice][underI][underObstr] !== "undefined"){
    //enter code here
}

19
2018-06-15 15:15



Un moyen beaucoup plus sûr de vérifier si une propriété existe sur l'objet consiste à utiliser un objet vide ou un prototype d'objet pour appeler hasOwnProperty()

var foo = {
  hasOwnProperty: function() {
    return false;
  },
  bar: 'Here be dragons'
};

foo.hasOwnProperty('bar'); // always returns false

// Use another Object's hasOwnProperty and call it with 'this' set to foo
({}).hasOwnProperty.call(foo, 'bar'); // true

// It's also possible to use the hasOwnProperty property from the Object
// prototype for this purpose
Object.prototype.hasOwnProperty.call(foo, 'bar'); // true

Référence de Documents Web MDN - Object.prototype.hasOwnProperty ()


9
2017-07-25 12:36



Pour sa propre propriété:

var loan = { amount: 150 };
if(Object.prototype.hasOwnProperty.call(loan, "amount")) 
{ 
   //will execute
}

Note: en utilisant Object.prototype.hasOwnProperty est mieux que loan.hasOwnProperty (..), dans le cas où une hasOwnProperty personnalisée est définie dans la chaîne du prototype (ce qui n'est pas le cas ici), comme

var foo = {
      hasOwnProperty: function() {
        return false;
      },
      bar: 'Here be dragons'
    };

// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty

Pour inclure les propriétés héritées dans la recherche, utilisez le dans operator: (mais vous devez placer un objet sur le côté droit de 'in', les valeurs primitives enverront une erreur, par ex. 'longueur' dans 'home' va jeter une erreur, mais 'length' dans new String ('home') habitude)

const yoshi = { skulk: true };
const hattori = { sneak: true };
const kuma = { creep: true };
if ("skulk" in yoshi) 
    console.log("Yoshi can skulk");

if (!("sneak" in yoshi)) 
    console.log("Yoshi cannot sneak");

if (!("creep" in yoshi)) 
    console.log("Yoshi cannot creep");

Object.setPrototypeOf(yoshi, hattori);

if ("sneak" in yoshi)
    console.log("Yoshi can now sneak");
if (!("creep" in hattori))
    console.log("Hattori cannot creep");

Object.setPrototypeOf(hattori, kuma);

if ("creep" in hattori)
    console.log("Hattori can now creep");
if ("creep" in yoshi)
    console.log("Yoshi can also creep");

// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in

Remarque: On peut être tenté d’utiliser accessor typeof et [] comme code suivant: ne fonctionne pas ...

var loan = { amount: 150 };

loan.installment = undefined;

if("installment" in loan) // correct
{
    // will execute
}

if(typeof loan["installment"] !== "undefined") // incorrect
{
    // will not execute
}

3
2017-10-15 12:57



Vous pouvez utiliser hasOwnProperty() aussi bien que in opérateur.


1
2017-11-07 15:38



Vous pouvez aussi utiliser ceci Composant object-hasOwnProperty J'ai écrit pour éviter de copier-coller entre différents endroits. Il peut être utilisé pour déterminer si l'objet a la propriété spécifiée.

Exemples:

hasOwnProperty({foo: 'bar'}, 'foo') // => true
hasOwnProperty({foo: 'bar'}, 'bar') // => false

Comment ça marche:

function hasOwnProperty(obj: {}, prop: string|number): boolean {
  return Object.prototype.hasOwnProperty.call(obj, prop);
};

-2
2018-05-28 13:03



qu'en est-il de? !!myObject['myProp'] travaille pour moi.


-9
2017-12-12 13:48