Если вы просто хотите знать, если объект не имеет определенное свойство, независимо от того, где в цепочке прототипов, вы могли бы использовать in
оператор:
if (myprop in myobj) {
...
}
Считает, что его метод будет проверять все свойства и метод, которые имеет ваш объект, и метод, который он получает от «языка». В качестве примера:
var o = {
"myprop": true
};
if ("toString" in o) {
console.log('toString exists');
}
Он печатает 'ToString существует.
Если вы заинтересованы в проверке только внутри объекта, вы должны использовать:
if (Object.hasOwnProperty.call(myobject, myprop)) {
...
}
Это позволяет избежать унаследованный метод, как toString
и hasOwnProperty
.
Грязный способ использует метод !!
:
if (!!myobject[myprop]) {
....
}
Таким образом, усилие, чтобы преобразовать любой myobject[myprop]
к логическому значению. Проблема с этим - это когда вы можете иметь значения, которые могли бы преобразовать в false, например пустую строку или null или undefined или, конечно же, логическое значение false!
приятно! Раньше я полагал, что вместо этого он сделает исключение. – rox