Javascript, что такое свойство в hasOwnProperty? - PullRequest
53 голосов
/ 22 февраля 2012
if (someVar.hasOwnProperty('someProperty') ) {
 // do something();
} else {
 // do somethingElse();
}

Как правильно употреблять / объяснять hasOwnProperty('someProperty')?

Почему мы не можем просто использовать someVar.someProperty, чтобы проверить, содержит ли объект someVar свойство с именем someProperty?

Что такое собственность в этом случае?

Какое свойство проверяет этот JavaScript?

Ответы [ 7 ]

98 голосов
/ 22 февраля 2012

hasOwnProperty возвращает логическое значение, указывающее, имеет ли объект, для которого вы его вызываете, свойство с именем аргумента. Например:

var x = {
    y: 10
};
console.log(x.hasOwnProperty("y")); //true
console.log(x.hasOwnProperty("z")); //false

Однако он не смотрит на цепочку прототипов объекта.

Полезно использовать его при перечислении свойств объекта с помощью конструкции for...in.

Если вы хотите увидеть полную информацию, то спецификация ES5 - это, как всегда, хорошее место для поиска.

15 голосов
/ 26 сентября 2017

Вот короткий и точный ответ:

В javascript каждый объект имеет набор встроенных пар ключ-значение, которые имеют метаинформацию об объекте.Когда вы перебираете все пары ключ-значение, используя for...in construct / loop для объекта, вы перебираете и эти пары ключ-значение метаинформации (что вам определенно не нужно).

enter image description here

Использование hasOwnPropery(property) отфильтровывания этих ненужных циклов метаинформации и прямой проверки того, что параметр property является заданным пользователем свойством вобъект или нет.Под отфильтровыванием я имею в виду, что hasOwnProperty(property) не выглядит, если в цепочке прототипов Object существует 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

Надеюсь, все ясно!

10 голосов
/ 22 февраля 2012

он проверяет:

Возвращает логическое значение, указывающее, есть ли у объекта свойство с указанным именем

Метод hasOwnProperty возвращает значение true, если у объекта есть свойствоуказанное имя, ложь, если это не так.Этот метод не проверяет, существует ли свойство в цепочке прототипов объекта;свойство должно быть членом самого объекта.

Пример:

var s = new String("Sample");
document.write(s.hasOwnProperty("split"));                        //false 
document.write(String.prototype.hasOwnProperty("split"));         //true
5 голосов
/ 17 августа 2018

Резюме:

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 loop 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]);
  }
}
2 голосов
/ 22 февраля 2012

Вы используете object.hasOwnProperty ( p ), чтобы определить, имеет ли объект перечисляемое свойство p -

объект может иметь свой собственныйпрототип, где методы и атрибуты по умолчанию назначаются каждому экземпляру объекта.hasOwnProperty возвращает true только для свойств, которые были специально установлены в конструкторе или добавлены к экземпляру позже.

, чтобы определить, определено ли p вообще, где угодно, для объекта, используйтеif ( p instanceof object), где p вычисляется как строка имени свойства.

Например, по умолчанию все объекты имеют метод toString, но он не будет отображаться в hasOwnProperty.

2 голосов
/ 22 февраля 2012

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
}
}
0 голосов
/ 22 февраля 2012

Он проверяет, есть ли у объекта свойство . Насколько я знаю, он работает так же, как и if(obj.prop).

...