Как проверить, существует ли свойство объекта с переменной, содержащей имя свойства?
595245 просмотра
6 ответа
Я проверяю наличие свойства объекта с переменной, содержащей имя свойства, о котором идет речь.
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
Ответы (6)
1196 плюса
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')
это не так.
43 плюса
Вы можете использовать hasOwnProperty , но на основе ссылки вам нужны кавычки при использовании этого метода:
if (myObj.hasOwnProperty('myProp')) {
// do something
}
Другой способ - использовать в операторе, но здесь вам также нужны кавычки :
if ('myProp' in myObj) {
// do something
}
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in
Автор: Adorjan Princz Размещён: 10.05.2015 07:2224 плюса
Спасибо всем за помощь и настойчивость, чтобы избавиться от заявления Eval. Переменные должны быть в скобках, а не в точечных обозначениях. Это работает и чистый, правильный код.
Каждая из этих переменных - appChoice, underI, underObstr.
if(typeof tData.tonicdata[appChoice][underI][underObstr] !== "undefined"){
//enter code here
}
Автор: Slopeside Creative
Размещён: 15.06.2012 03:15
11 плюса
Для собственного имущества:
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'
};
Чтобы включить унаследованные свойства в находку, используйте оператор in : (но вы должны поместить объект справа от 'in', примитивные значения приведут к ошибке, например, 'length' в 'home' вызовет ошибку, но 'length' в новой строке («дом») не будет)
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
}
Автор: adnan2nd
Размещён: 15.10.2017 12:57
10 плюса
Гораздо более безопасный способ проверить, существует ли свойство объекта, - использовать пустой объект или прототип объекта для вызова 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
Ссылка из MDN Web Docs - Object.prototype.hasOwnProperty ()
Автор: skmasq Размещён: 25.07.2016 12:362 плюса
Вы можете использовать hasOwnProperty()
как in
оператор.
Вопросы из категории :
- javascript Как определить, какой из указанных шрифтов был использован на веб-странице?
- javascript Валидация клиентской стороны ASP.Net
- javascript Длина объекта JavaScript
- javascript Получение текста из выпадающего списка
- javascript Скрипт входа со скрытыми кнопками
- javascript Как автоматически изменить размер текстовой области с помощью Prototype?
- javascript Удаление элементов с помощью Array.map в JavaScript
- javascript Прокрутка переполненных DIV с помощью JavaScript
- javascript API Карт Google - проблемы с классом GLatLngBounds
- javascript Проверка десятичных чисел в JavaScript - IsNumeric ()
- object Вызов функции модуля с использованием его имени (строки)
- object Создайте базовый итератор Python
- object Обнаружение неопределенного свойства объекта
- object Каков наиболее эффективный способ глубокого клонирования объекта в JavaScript?
- object Как определить равенство для двух объектов JavaScript?
- object Избегать! = Нулевые заявления
- object Как вы программно устанавливаете атрибут?
- object Каков наилучший способ сбрасывать все объекты в журнал на C #?
- object JavaScript isDOM - Как проверить, является ли объект JavaScript объектом DOM?
- object Объектная ориентация в C