-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
translation(JS): web/javascript/reference/global_objects/object/hasow…
…nproperty (#884) * translation(JS): web/javascript/reference/global_objects/object/hasownproperty * Apply suggestions from code review Co-authored-by: Mykola Myslovskyi <[email protected]> Co-authored-by: Mykola Myslovskyi <[email protected]>
- Loading branch information
1 parent
0779f1c
commit ead74a1
Showing
1 changed file
with
169 additions
and
0 deletions.
There are no files selected for viewing
169 changes: 169 additions & 0 deletions
169
files/uk/web/javascript/reference/global_objects/object/hasownproperty/index.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,169 @@ | ||
--- | ||
title: Object.prototype.hasOwnProperty() | ||
slug: Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty | ||
tags: | ||
- JavaScript | ||
- Method | ||
- Object | ||
- Prototype | ||
- hasOwnProperty | ||
browser-compat: javascript.builtins.Object.hasOwnProperty | ||
--- | ||
|
||
{{JSRef}} | ||
|
||
Метод **`hasOwnProperty()`** (має власну властивість) повертає булеве значення, котре вказує на те, чи має об'єкт задану властивість як свою власну (але не успадковану). | ||
|
||
{{EmbedInteractiveExample("pages/js/object-prototype-hasownproperty.html")}} | ||
|
||
> **Примітка:** {{jsxref("Object.hasOwn()")}} є рекомендованою альтернативою `hasOwnProperty()` в тих браузерах, у котрих підтримується. | ||
## Синтаксис | ||
|
||
```js-nolint | ||
hasOwnProperty(prop) | ||
``` | ||
|
||
### Параметри | ||
|
||
- `prop` | ||
- : {{jsxref("String")}} з іменем або [Symbol](/uk/docs/Web/JavaScript/Reference/Global_Objects/Symbol) властивості до перевірки. | ||
|
||
### Повернене значення | ||
|
||
Повертає `true`, якщо об'єкт має задану властивість за власну; інакше – `false`. | ||
|
||
## Опис | ||
|
||
Метод **`hasOwnProperty()`** повертає `true`, якщо задана властивість є безпосередньою властивістю об'єкта, навіть якщо значенням цієї властивості є `null` чи `undefined`. Цей метод повертає `false`, якщо властивість була успадкована чи не була оголошена взагалі. На відміну від оператора {{jsxref("Operators/in", "in")}}, цей метод не шукає задану властивість у ланцюжку прототипів об'єкта. | ||
|
||
Цей метод можна викликати на _більшості_ об'єктів JavaScript, адже більшість об'єктів походить від {{jsxref("Object")}}, а отже – успадковують його методи. Наприклад, {{jsxref("Array")}} – це також {{jsxref("Object")}}, тому `hasOwnProperty()` можна використовувати для перевірки існування індексу: | ||
|
||
```js | ||
const fruits = ["Яблуко", "Банан", "Кавун", "Апельсин"]; | ||
fruits.hasOwnProperty(3); // true ('Апельсин') | ||
fruits.hasOwnProperty(4); // false - не визначено | ||
``` | ||
|
||
Цей метод не буде доступним на об'єктах, в котрих ця логіка заміщена, або на об'єктах, створених за допомогою `Object.create(null)` (адже вони не успадковують від `Object.prototype`). Приклади таких випадків надані нижче. | ||
|
||
## Приклади | ||
|
||
### Використання hasOwnProperty для перевірки існування власної властивості | ||
|
||
Наступний код демонструє, як можна з'ясувати, чи містить об'єкт `example` властивість на ім'я `prop`. | ||
|
||
```js | ||
const example = {}; | ||
example.hasOwnProperty("prop"); // false | ||
|
||
example.prop = "існує"; | ||
example.hasOwnProperty("prop"); // true - 'prop' була визначена | ||
|
||
example.prop = null; | ||
example.hasOwnProperty("prop"); // true - присутня власна властивість зі значенням null | ||
|
||
example.prop = undefined; | ||
example.hasOwnProperty("prop"); // true - присутня власна властивість зі значенням undefined | ||
``` | ||
|
||
### Безпосередні та успадковані властивості | ||
|
||
Наступний приклад розрізняє безпосередні властивості та властивості, що були успадковані за ланцюжком прототипів: | ||
|
||
```js | ||
const example = {}; | ||
example.prop = "існує"; | ||
|
||
// `hasOwnProperty` поверне true лише для безпосередніх властивостей: | ||
example.hasOwnProperty("prop"); // повертає true | ||
example.hasOwnProperty("toString"); // повертає false | ||
example.hasOwnProperty("hasOwnProperty"); // повертає false | ||
|
||
// Оператор `in` поверне true і для безпосередніх, і для успадкованих властивостей: | ||
"prop" in example; // повертає true | ||
"toString" in example; // повертає true | ||
"hasOwnProperty" in example; // повертає true | ||
``` | ||
|
||
### Ітерування властивостей об'єкта | ||
|
||
Наступний приклад демонструє, як можна ітерувати перелічувані властивості об'єкта, не обробляючи успадкованих властивостей. | ||
|
||
```js | ||
const buz = { | ||
fog: "stack", | ||
}; | ||
|
||
for (const name in buz) { | ||
if (buz.hasOwnProperty(name)) { | ||
console.log(`це точно fog (${name}). Значення: ${buz[name]}`); | ||
} else { | ||
console.log(name); // toString чи щось іще | ||
} | ||
} | ||
``` | ||
|
||
Зверніть увагу, що цикл {{jsxref("Statements/for...in", "for...in")}} ітерує лише перелічувані елементи: відсутність неперелічуваних властивостей, виведених в циклі, не означає, що сам `hasOwnProperty` обмежений перелічуваними елементами (те саме стосується {{jsxref("Object.getOwnPropertyNames()")}}). | ||
|
||
### Використання hasOwnProperty як імені властивості | ||
|
||
JavaScript не захищає ім'я властивості `hasOwnProperty`; об'єкт, що має властивість з таким іменем, може повертати некоректні результати: | ||
|
||
```js | ||
const foo = { | ||
hasOwnProperty() { | ||
return false; | ||
}, | ||
bar: "Тут живуть дракони", | ||
}; | ||
|
||
foo.hasOwnProperty("bar"); // власна реалізація завжди повертає false | ||
``` | ||
|
||
Рекомендований спосіб розв'язати цю проблему – використовувати натомість {{jsxref("Object.hasOwn()")}} (у тих браузерах, що це підтримують). Серед інших альтернатив – використання _зовнішнього_ `hasOwnProperty`: | ||
|
||
```js | ||
const foo = { bar: "Тут живуть дракони" }; | ||
|
||
// Використання методу Object.hasOwn() – рекомендовано | ||
Object.hasOwn(foo, "bar"); // true | ||
|
||
// Використання властивості hasOwnProperty з прототипа Object | ||
Object.prototype.hasOwnProperty.call(foo, "bar"); // true | ||
|
||
// Використання hasOwnProperty іншого Object | ||
// і виклик його з foo як 'this' | ||
({}.hasOwnProperty.call(foo, "bar")); // true | ||
``` | ||
|
||
Зверніть увагу, що у двох перших випадках нові об'єкти не створюються. | ||
|
||
### Об'єкти, створені за допомогою Object.create(null) | ||
|
||
Об'єкти, створені за допомогою {{jsxref("Object.create()","Object.create(null)")}}, не успадковують від `Object.prototype`, а отже – `hasOwnProperty()` – недоступний. | ||
|
||
```js | ||
const foo = Object.create(null); | ||
foo.prop = "існує"; | ||
foo.hasOwnProperty("prop"); // Uncaught TypeError: foo.hasOwnProperty is not a function | ||
``` | ||
|
||
Способи розв'язання цієї проблеми – такі самі, як в попередньому розділі: віддання переваги {{jsxref("Object.hasOwn()")}}, або ж використання `hasOwnProperty()` зовнішнього об'єкта. | ||
|
||
## Специфікації | ||
|
||
{{Specifications}} | ||
|
||
## Сумісність із браузерами | ||
|
||
{{Compat}} | ||
|
||
## Дивіться також | ||
|
||
- {{jsxref("Object.hasOwn()")}} | ||
- [Перелічуваність і власність властивостей](/uk/docs/Web/JavaScript/Enumerability_and_ownership_of_properties) | ||
- {{jsxref("Object.getOwnPropertyNames()")}} | ||
- {{jsxref("Statements/for...in", "for...in")}} | ||
- {{jsxref("Operators/in", "in")}} | ||
- [Посібник JavaScript: Повторний огляд успадкування](/uk/docs/Web/JavaScript/Inheritance_and_the_prototype_chain) |