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

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

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

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

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

Какое свойство выполняет эта проверка javascript?

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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

Пример:

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

Ответ 3

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

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

введите описание изображения здесь

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

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

Ответ 4

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
}
}

Ответ 5

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

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

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

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

Ответ 7

Я также написал этот простой объект-hasOwnProperty повторно используемый компонент, возвращающий логическое значение для проверки того, имеет ли объект указанное свойство. Он имеет 2 примера и 3 теста, которые могут помочь лучше понять поведение реального использования.

Примеры:

hasOwnProperty({foo: 'bar'}, 'foo') // => true
hasOwnProperty({foo: 'bar'}, 'bar') // => false

Проверенные варианты использования:

hasOwnProperty() should return false as given object do not contain key `bar`
hasOwnProperty() should return true as given object contains key `foo`
hasOwnProperty() should return false if key is null

Вот как это работает:

function hasOwnProperty(obj: {}, prop: string|number): boolean {
  return Object.prototype.hasOwnProperty.call(obj, prop);
};