Я проверяю наличие свойства объекта с переменной, содержащей имя свойства, о котором идет речь.
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
javascript
object
Склоны Креатив
источник
источник
hasOwnProperty
метод перезаписан, вы можете положиться наObject.prototype.hasOwnProperty.call(object, property)
».Ответы:
Или
Или
Обратите внимание, что
hasOwnProperty
не проверяет унаследованные свойства, тогда какin
делает. Например,'constructor' in myObj
это правда, ноmyObj.hasOwnProperty('constructor')
это не так.источник
hasOwnProperty()
тогда лучшеmyObj[myProp]
(из других ответов), так как он работает, даже если значениеmyProp
равно 0'qqq'.hasOwnProperty('length')
естьtrue
, вы можете сделать это.myProp
0, то выражение if будет выглядеть так,if (myObj[0])
что если уmyObj
него вообще есть какие-либо свойства, выражение получит оценкуtrue
. И,myObj[0]
возможно, не та собственность, которую вы ищете.Вы можете использовать hasOwnProperty , но на основе ссылки вам нужны кавычки при использовании этого метода:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty
Другой способ - использовать в операторе, но здесь вам также нужны кавычки :
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in
источник
hasOwnProperty()
это реализовано.Спасибо всем за помощь и настойчивость, чтобы избавиться от заявления Eval. Переменные должны быть в скобках, а не в точечных обозначениях. Это работает и чистый, правильный код.
Каждая из этих переменных - appChoice, underI, underObstr.
источник
tData.tonicdata[appChoice]
результатеunderI
получится значение, которое не имеет соответствующего свойства / индекса , это приведет кTypeError
выбросу.Для собственного имущества:
Примечание: использование Object.prototype.hasOwnProperty лучше, чем loan.hasOwnProperty (..), в случае, если в цепочке прототипов определен пользовательский hasOwnProperty (что здесь не так), например
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty
Чтобы включить унаследованные свойства в находку, используйте оператор in : (но вы должны поместить объект справа от 'in', примитивные значения приведут к ошибке, например, 'length' в 'home' вызовет ошибку, но 'length' в новой строке («дом») не будет)
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in
Примечание. Может возникнуть соблазн использовать аксессор свойств typeof и [] в качестве следующего кода, который работает не всегда ...
источник
Гораздо более безопасный способ проверить, существует ли свойство объекта, - использовать пустой объект или прототип объекта для вызова
hasOwnProperty()
Ссылка из MDN Web Docs - Object.prototype.hasOwnProperty ()
источник
hasOwnProperty
, никакое количество таких охранников не сделает ваш код безопасным или защищенным.Вы можете использовать
hasOwnProperty()
какin
оператор.источник