Skip to content

Fix object (chapter 01-04-01) #694

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Mar 30, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion 1-js/04-object-basics/01-object/3-is-empty/task.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ importance: 5

# Перевірка на порожнечу

Напишіть функцію `isEmpty(obj)`, яка повертає `true`, якщо об’єкт не має властивості, інакше `false`.
Напишіть функцію `isEmpty(obj)`, яка повертає `true`, якщо об’єкт не має жодної властивості, інакше `false`.

Має так працювати:

Expand Down
20 changes: 10 additions & 10 deletions 1-js/04-object-basics/01-object/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ let user = {
age: 30*!*,*/!*
}
```
Це називається "кінцевою" або "висячою" комою. Полегшує додавання/видалення/переміщення по властивостях, оскільки всі рядки стають однаковими.
Це називається "кінцевою" або "висячою" комою. Вона полегшує додавання/видалення/переміщення по властивостях, оскільки всі рядки стають однаковими.

## Квадратні дужки

Expand Down Expand Up @@ -205,7 +205,7 @@ let bag = {

Тому більшість часу, коли назви властивостей відомі та прості, використовується крапка. А якщо нам потрібно щось складніше, то переходимо до квадратних дужок.

## Властивість зі змінної
## Скорочений запис властивості зі змінної (Property value shorthand)

У реальному коді ми часто використовуємо наявні змінні як значення для імен властивостей.

Expand All @@ -224,7 +224,7 @@ let user = makeUser("Іван", 30);
alert(user.name); // Іван
```

В наведеному вище прикладі назва властивостей `name` і `age` збігаються з назвами змінних, які ми підставляємо як значення цих властивостей. Такий підхід настільки поширений, що існують спеціальні *короткі властивості* для спрощення цього запису.
В наведеному вище прикладі назва властивостей `name` і `age` збігаються з назвами змінних, які ми підставляємо як значення цих властивостей. Такий підхід настільки поширений, що існує спеціальний *скорочений запис властивості зі змінної* (property value shorthand) для спрощення цього запису.

Замість `name: name` ми можемо написати просто `name`:

Expand All @@ -240,7 +240,7 @@ function makeUser(name, age) {
}
```

Ми можемо використовувати як звичайні властивості, так і скорочення в одному об’єкті:
Ми можемо одночасно в одному об'єкті використовувати і скорочення, і звичайні об'єкти:

```js
let user = {
Expand All @@ -252,12 +252,12 @@ let user = {

## Обмеження для імен властивостей

Як ми вже знаємо, змінна не може мати ім’я, зі списку слів, зарезервованих мовою, як-от "for", "let", "return" тощо.
Як ми вже знаємо, змінна не може мати ім’я зі списку слів зарезервованих мовою, таких як "for", "let", "return" тощо.

То для властивості об’єкта немає такого обмеження:
Але для властивості об’єкта немає такого обмеження:

```js run
// ці назви властивостей -- правильні
// ці назви властивостей правильні
let obj = {
for: 1,
let: 2,
Expand Down Expand Up @@ -288,7 +288,7 @@ alert( obj[0] ); // тест (таж сама властивість)
```js run
let obj = {};
obj.__proto__ = 5; // присвоїмо число
alert(obj.__proto__); // [object Object] - значення -- це об’єкт, тобто не те, що ми очікували
alert(obj.__proto__); // [object Object] - значення є об’єктом, тобто не те, що ми очікували
```

Як ми бачимо з коду, присвоєння числа `5` ігнорується.
Expand All @@ -299,7 +299,7 @@ alert(obj.__proto__); // [object Object] - значення -- це об’єк

Помітною особливістю об’єктів у JavaScript, у порівнянні з багатьма іншими мовами, є можливість доступу до будь-якої властивості. Помилки не буде, якщо властивості не існує!

Читання відсутньої властивості просто повертає `undefined`. Тому ми можемо легко перевірити, чи існує властивість:
Спроба прочитати відсутню властивість просто повертає `undefined`. Тому ми можемо легко перевірити, чи існує властивість:

```js run
let user = {};
Expand Down Expand Up @@ -352,7 +352,7 @@ alert( "test" in obj ); // true, властивість існує!

У наведеному вище коді властивість `obj.test` технічно існує. Отже, оператор `in` працює правильно.

Такі ситуації трапляються дуже рідко, тому що `undefined` не слід чітко призначати. Ми в основному використовуємо `null` для "невідомих" або "порожніх" значень. Отже, оператор `in` -- екзотичний гість у коді.
Такі ситуації трапляються дуже рідко, бо `undefined` не слід явно призначати. Ми в основному використовуємо `null` для "невідомих" або "порожніх" значень. Отже, оператор `in` -- екзотичний гість у коді.


## Цикл "for..in" [#forin]
Expand Down