Javascript что такое свойство в hasOwnProperty?

If( somevar.hasOwnProperty('someProperty') ) {
 // do something();
} else {
 // do sometingelse();
}

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

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

Что такое свойство в этом случае?

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

7 ответов


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

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

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

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

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


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

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

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

пример :

var s = new String("Sample");
document.write(s.hasOwnProperty("split"));                        //false 
document.write(String.prototype.hasOwnProperty("split"));         //true

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

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

enter image description here

используя hasOwnPropery(property) фильтры-out эти ненужные петли через мета-информация и непосредственно проверяет, что является параметром property дана пользователя свойства объекта или нет. By фильтры-out, я имею в виду, что hasOwnProperty(property) не выглядит ли, property существует в цепочке прототипов объекта aka meta-information.

он возвращает boolean 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

Я надеюсь, это ясно !


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(p), чтобы определить, имеет ли объект перечисли свойства p -

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

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

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


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


резюме:

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]);
  }
}