web-dev-qa-db-fra.com

Comment vérifier si la propriété de l'objet existe avec une variable contenant le nom de la propriété?

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");
};

Ceci est undefined parce qu'il recherche myObj.myProp mais je veux qu'il vérifie myObj.prop

595
Slopeside Creative
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");
}

Notez que hasOwnProperty ne vérifie pas les propriétés héritées, alors que in le fait. Par exemple, 'constructor' in myObj est vrai, mais myObj.hasOwnProperty('constructor') ne l’est pas.

1155
Rocket Hazmat

Vous pouvez utiliser hasOwnProperty , mais en fonction de la référence dont vous avez besoin guillemets lorsque en utilisant 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 méthode consiste à utiliser dans l'opérateur , mais vous avez besoin de guillemets ici bien:

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

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

43
Adorjan Princz

Nous vous remercions de l’aide de tous et de votre volonté de vous débarrasser de la déclaration eval. Les variables devaient être entre parenthèses, pas la notation par points. Cela fonctionne et est propre, code approprié.

Chacune de celles-ci sont des variables: appChoice, underI, underObstr.

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

Un moyen beaucoup plus sûr de vérifier si une propriété existe sur l'objet est d'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 ()

10
skmasq

Pour propre propriété:

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

Remarque: utiliser Object.prototype.hasOwnProperty vaut mieux que loan.hasOwnProperty (..), dans le cas où un hasOwnProperty personnalisé est défini dans la chaîne de prototypes (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 l'opérateur dans : (mais vous devez placer un objet à droite de 'in', les valeurs primitives jetteront erreur, par exemple 'longueur' dans 'home' émettra une erreur, mais 'longueur' dans une nouvelle chaîne (' home ') ne sera pas)

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 l’accesseur de propriété typeof et [] comme code suivant qui ne fonctionne pas toujours ...

var loan = { amount: 150 };

loan.installment = undefined;

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

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

Vous pouvez utiliser hasOwnProperty() ainsi que l'opérateur in.

2
Simran Kaur