Как проверить, существует ли свойство объекта с переменной, содержащей имя свойства?
Я проверяю существование свойства объекта с переменной, содержащей указанное имя свойства.
var myObj;
myObj.prop = "exists";
var myProp = "p"+"r"+"o"+"p";
if(myObj.myProp){
alert("yes, i have that property");
};
Это undefined
, потому что он ищет myObj.myProp
, но я хочу, чтобы он проверял myObj.prop
Ответы
Ответ 1
var myProp = 'prop';
if(myObj.hasOwnProperty(myProp)){
alert("yes, i have that property");
}
Или же
var myProp = 'prop';
if(myProp in myObj){
alert("yes, i have that property");
}
Или же
if('prop' in myObj){
alert("yes, i have that property");
}
Обратите внимание, что hasOwnProperty
не проверяет унаследованные свойства, тогда как in
делает. Например, 'constructor' in myObj
- это истина, а myObj.hasOwnProperty('constructor')
- нет.
Ответ 2
Вы можете использовать hasOwnProperty, но на основе ссылки вам нужно кавычки при использовании этого метода:
if (myObj.hasOwnProperty('myProp')) {
// do something
}
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty
Другой способ - использовать в, но вам нужны кавычки:
if ('myProp' in myObj) {
// do something
}
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in
Ответ 3
Спасибо вам за помощь и стремление избавиться от заявления eval.
Переменные должны быть в скобках, а не в виде точечной нотации. Это работает и является чистым, правильным кодом.
Каждая из этих переменных: appChoice, underI, underObstr.
if(typeof tData.tonicdata[appChoice][underI][underObstr] !== "undefined"){
//enter code here
}
Ответ 4
Для собственного имущества:
var loan = { amount: 150 };
if(Object.prototype.hasOwnProperty.call(loan, "amount"))
{
//will execute
}
Примечание: использование Object.prototype.hasOwnProperty лучше, чем loan.hasOwnProperty(..), в случае, если в цепочке прототипов определен пользовательский hasOwnProperty (что здесь не так), например
var foo = {
hasOwnProperty: function() {
return false;
},
bar: 'Here be dragons'
};
//https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty
Чтобы включить в поиск унаследованные свойства, используйте оператор в: (но вы должны поместить объект справа от 'in', примитивные значения приведут к ошибке, например, 'length' в 'home выдаст ошибку, но "длина" в новой строке ("home") не будет)
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
Примечание. Может возникнуть соблазн использовать аксессор свойств typeof и [] в качестве следующего кода, который не всегда работает...
var loan = { amount: 150 };
loan.installment = undefined;
if("installment" in loan) // correct
{
// will execute
}
if(typeof loan["installment"] !== "undefined") // incorrect
{
// will not execute
}
Ответ 5
Более безопасный способ проверить, существует ли свойство объекта, использовать пустой объект или прототип объекта для вызова hasOwnProperty()
var foo = {
hasOwnProperty: function() {
return false;
},
bar: 'Here be dragons'
};
foo.hasOwnProperty('bar'); // always returns false
// Use another Object hasOwnProperty and call it with 'this' set to foo
({}).hasOwnProperty.call(foo, 'bar'); // true
// It also possible to use the hasOwnProperty property from the Object
// prototype for this purpose
Object.prototype.hasOwnProperty.call(foo, 'bar'); // true
Ссылка из MDN Web Docs - Object.prototype.hasOwnProperty()
Ответ 6
Вы можете использовать hasOwnProperty()
, а также оператор in
.
Ответ 7
Вы также можете использовать этот компонент object-hasOwnProperty, который я написал, чтобы избежать копирования в разные места. Его можно использовать для определения того, имеет ли объект указанное свойство.
Примеры:
hasOwnProperty({foo: 'bar'}, 'foo') // => true
hasOwnProperty({foo: 'bar'}, 'bar') // => false
Как это работает:
function hasOwnProperty(obj: {}, prop: string|number): boolean {
return Object.prototype.hasOwnProperty.call(obj, prop);
};
Ответ 8
а что? !!myObject['myProp']
работает для меня.
Ответ 9
if(myObj[myProp])
{
`enter code here`
}