Рассмотреть возможность:
if (someVar.hasOwnProperty('someProperty') ) {
// Do something();
} else {
// Do somethingElse();
}
Как правильно использовать / объяснять hasOwnProperty('someProperty')
?
Почему мы не можем просто someVar.someProperty
проверить, someVar
содержит ли объект свойство с именем someProperty
?
Что в этом случае есть собственность?
Какое свойство проверяет этот JavaScript?
javascript
object
hasownproperty
Летать
источник
источник
Ответы:
hasOwnProperty
возвращает логическое значение, указывающее, имеет ли вызываемый объект свойство с именем аргумента. Например:var x = { y: 10 }; console.log(x.hasOwnProperty("y")); //true console.log(x.hasOwnProperty("z")); //false
Однако он не смотрит на цепочку прототипов объекта.
Его полезно использовать, когда вы перечисляете свойства объекта с помощью
for...in
конструкции.Если вы хотите увидеть полную информацию, спецификация ES5 , как всегда, является хорошим местом.
источник
window
eval
код, а не как глобальный или функциональный код). Я попробовал это на пустой HTML-странице и получил ошибку «не могу преобразовать null в объект».Вот краткий и точный ответ:
В JavaScript каждый объект имеет набор встроенных пар ключ-значение, которые содержат метаинформацию об объекте. Когда вы перебираете все пары ключ-значение, используя
for...in
конструкцию / цикл для объекта, вы также перебираете эти пары ключ-значение метаинформации (что вам определенно не нужно).Использование
hasOwnPropery(property)
фильтров отфильтровывает этот ненужный цикл по метаинформации и напрямую проверяет, является ли параметрproperty
заданным пользователем свойством в объекте или нет. Под фильтрацией я подразумеваю, чтоhasOwnProperty(property)
это не выглядит, еслиproperty
существует в цепочке прототипов объекта, также известной как метаинформация.На
true/false
основе этого он возвращает логическое значение .Вот пример:
var fruitObject = {"name": "Apple", "shape": "round", "taste": "sweet"}; console.log(fruitObject.hasOwnProperty("name")); //true console.log(Object.prototype.hasOwnProperty("toString");) //true because in above snapshot you can see, that there is a function toString in meta-information
Надеюсь понятно!
источник
console.log(Object.prototype....
; ты имел ввидуconsole.log(fruitObject.
? FruitObject или Object?for (var key in fruitObject) { ... }
любом случае запускаю js-цикл только через ключи, не являющиеся прототипами, я что-то упускаю или среда выполнения JS изменила способ обработки ключа в объекте петли?Проверяет:
Возвращает логическое значение, указывающее, есть ли у объекта свойство с указанным именем.
Метод hasOwnProperty возвращает true, если объект имеет свойство с указанным именем, и false, если его нет. Этот метод не проверяет, существует ли свойство в цепочке прототипов объекта; свойство должно быть членом самого объекта.
Пример:
var s = new String("Sample"); document.write(s.hasOwnProperty("split")); //false document.write(String.prototype.hasOwnProperty("split")); //true
источник
Резюме:
hasOwnProperty()
- это функция, которая может быть вызвана для любого объекта и принимает на входе строку. Он возвращает логическое значение, которое имеет значение,true
если свойство расположено на объекте, в противном случае возвращается false.hasOwnProperty()
расположен наObject.prototype
и, следовательно, доступен для любого объекта.Пример:
function Person(name) { this.name = name; } Person.prototype.age = 25; const willem = new Person('willem'); console.log(willem.name); // Property found on object console.log(willem.age); // Property found on prototype console.log(willem.hasOwnProperty('name')); // 'name' is on the object itself console.log(willem.hasOwnProperty('age')); // 'age' is not on the object itself
В этом примере создается новый объект Person. У каждого человека есть собственное имя, которое инициализируется в конструкторе. Однако возраст находится не на объекте, а на прототипе объекта. Поэтому
hasOwnProperty()
возвращаетсяtrue
по имени иfalse
по возрасту.Практическое применение:
hasOwnProperty()
может быть очень полезным при обходе объекта с помощьюfor in
цикла. Вы можете проверить с его помощью, взяты ли свойства из самого объекта, а не из прототипа. Например:function Person(name, city) { this.name = name; this.city = city; } Person.prototype.age = 25; const willem = new Person('Willem', 'Groningen'); for (let trait in willem) { console.log(trait, willem[trait]); // This loops through all properties, including the prototype } console.log('\n'); for (let trait in willem) { if (willem.hasOwnProperty(trait)) { // This loops only through 'own' properties of the object console.log(trait, willem[trait]); } }
источник
Вы используете object.hasOwnProperty ( p ), чтобы определить, имеет ли объект перечислимое свойство p -
Объект может иметь свой собственный прототип, в котором методы и атрибуты по умолчанию назначаются каждому экземпляру объекта. hasOwnProperty возвращает значение true только для свойств, которые были специально установлены в конструкторе или добавлены к экземпляру позже.
Чтобы определить, определено ли p вообще и где-либо для объекта, используйте if ( p instanceof object), где p вычисляет строку имени свойства.
Например, по умолчанию все объекты имеют метод toString, но он не отображается в hasOwnProperty.
источник
hasOwnProperty - это обычная функция JavaScript, которая принимает строковый аргумент.
В вашем случае
somevar.hasOwnProperty('someProperty')
он проверяет,somevar
естьsomepropery
ли у функции - она возвращает true и false.Сказать
function somevar() { this.someProperty = "Generic"; } function welcomeMessage() { var somevar1 = new somevar(); if(somevar1.hasOwnProperty("name")) { alert(somevar1.hasOwnProperty("name")); // It will return true } }
источник
hasOwnProperty
правильный способ проверки в объект имеет свойство или нет.someVar.someProperty
не может использоваться как альтернатива этой ситуации. Следующее условие покажет хорошую разницу:const someVar = { isFirst: false }; // The condition is true, because 'someVar' has property 'isFirst' if (someVar.hasOwnProperty('isFirst')) { // Code runs } // The condition is false, because 'isFirst' is false. if (someVar.isFirst) { // Code does not runs here }
Следовательно,
someVar.isFirst
не может быть использована альтернативаsomeVar.hasOwnProperty('isFirst')
.источник
Сцена А:
const objA = { a: 1, b: 2 } for (const key in objA) { if (objA.hasOwnProperty(key)) { console.log(objA[key]) } } Output 1 2
Сцена B:
const objB = { a: 1, b: 2, hasOwnProperty() { return false } } for (const key in objB) { if (objB.hasOwnProperty(key)) { console.log(objB[key]) } } Outputs nothing
Поскольку JavaScript не защищает свойство hasOwnProperty. Таким образом, вы можете использовать это так:
for (const key in objB) { if (Object.prototype.hasOwnProperty.call(obj, key)) { console.log(objB[key]) } }
источник
Он проверяет, есть ли у объекта свойство . Работает так же
if(obj.prop)
, насколько я знаю.источник
obj.prop
следует цепочке прототипов,hasOwnProperty
а неprop
имеет ложное значение.if(obj.hasOwnProperty('prop'))
будетtrue
покаif(obj.prop)
будетfalse
.