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
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.
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
}
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
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
}
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 ()
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'
};
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
}
Vous pouvez utiliser hasOwnProperty()
ainsi que l'opérateur in
.