From 23e6e5e33f3c8f5c67eda785c5a61910a5c6511e Mon Sep 17 00:00:00 2001 From: Vitalii Perehonchuk Date: Tue, 16 Jul 2024 21:16:10 +0300 Subject: [PATCH 1/5] update(JS): web/javascript/data_structures --- .../web/javascript/data_structures/index.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/files/uk/web/javascript/data_structures/index.md b/files/uk/web/javascript/data_structures/index.md index 0940afca0a..c9cc181610 100644 --- a/files/uk/web/javascript/data_structures/index.md +++ b/files/uk/web/javascript/data_structures/index.md @@ -77,9 +77,9 @@ console.log(result); // 421 ### Тип Number -Тип {{jsxref("Number")}} є [64-бітним значенням двійкового формату IEEE 754 подвійної точності](/uk/docs/Web/JavaScript/Reference/Global_Objects/Number#koduvannia-number). Він здатний зберігати додатні числа з рухомою комою між 2-1074 ({{jsxref("Number.MIN_VALUE")}}) і 21024 ({{jsxref("Number.MAX_VALUE")}}), а також від'ємні числа з рухомою комою між -2-1074 і -21024, але може надійно зберігати цілі числа лише в діапазоні від -(253 − 1) ({{jsxref("Number.MIN_SAFE_INTEGER")}}) до 253 − 1 ({{jsxref("Number.MAX_SAFE_INTEGER")}}). Поза цим діапазоном JavaScript не може надійно представляти цілі числа; замість цього вони представляються у вигляді наближення з рухомою комою подвійної точності. Перевірити число на попадання в діапазон надійних цілих чисел можна за допомогою {{jsxref("Number.isSafeInteger()")}}. +Тип {{jsxref("Number")}} є [64-бітним значенням двійкового формату IEEE 754 подвійної точності](/uk/docs/Web/JavaScript/Reference/Global_Objects/Number#koduvannia-number). Він здатний зберігати додатні числа з рухомою комою між 2-1074 ({{jsxref("Number.MIN_VALUE")}}) і 21023 × (2 - 2-52) ({{jsxref("Number.MAX_VALUE")}}), а також від'ємні числа з рухомою комою аналогічного діапазону, але може надійно зберігати цілі числа лише в діапазоні від -(253 − 1) ({{jsxref("Number.MIN_SAFE_INTEGER")}}) до 253 − 1 ({{jsxref("Number.MAX_SAFE_INTEGER")}}). Поза цим діапазоном JavaScript не може надійно представляти цілі числа; замість цього вони представляються у вигляді наближення з рухомою комою подвійної точності. Перевірити число на попадання в діапазон надійних цілих чисел можна за допомогою {{jsxref("Number.isSafeInteger()")}}. -Значення поза діапазоном ±(від 2-1074 до 21024) автоматично перетворюються: +Значення поза діапазоном, числа якого можна подати з точністю, автоматично перетворюються: - Додатні значення, більші за {{jsxref("Number.MAX_VALUE")}}, перетворюються на `+Infinity`. - Додатні значення, менші за {{jsxref("Number.MIN_VALUE")}}, перетворюються на `+0`. @@ -237,17 +237,17 @@ JavaScript має стандартну бібліотеку вбудованих - Оператор [`+`](/uk/docs/Web/JavaScript/Reference/Operators/Addition): якщо один з операндів є рядком, то виконується зчеплення, інакше – арифметичне додавання. - Оператор [`==`](/uk/docs/Web/JavaScript/Reference/Operators/Equality): якщо один з операндів є примітивом, а інший – об'єктом, то об'єкт перетворюється на примітивне значення без преференцій у бік конкретного типу. -Ця операція не виконує жодних перетворень, якщо значення вже є примітивом. Об'єкти перетворюються на примітиви шляхом виклику їх методів [`[@@toPrimitive]()`](/uk/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toPrimitive) (з підказкою `"default"`), `valueOf()` та `toString()` – у такому порядку. Зверніть увагу, що перетворення на примітив викликає `valueOf()` раніше, ніж `toString()`, що подібно до логіки [зведення до числа](/uk/docs/Web/JavaScript/Reference/Global_Objects/Number#zvedennia-do-chysla), але відрізняється від [зведення до рядка](/uk/docs/Web/JavaScript/Reference/Global_Objects/String#zvedennia-do-riadka). +Ця операція не виконує жодних перетворень, якщо значення вже є примітивом. Об'єкти перетворюються на примітиви шляхом виклику їх методів [`[Symbol.toPrimitive]()`](/uk/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toPrimitive) (з підказкою `"default"`), `valueOf()` та `toString()` – у такому порядку. Зверніть увагу, що перетворення на примітив викликає `valueOf()` раніше, ніж `toString()`, що подібно до логіки [зведення до числа](/uk/docs/Web/JavaScript/Reference/Global_Objects/Number#zvedennia-do-chysla), але відрізняється від [зведення до рядка](/uk/docs/Web/JavaScript/Reference/Global_Objects/String#zvedennia-do-riadka). -Метод `[@@toPrimitive]()`, якщо є, мусить повертати примітив: повернення об'єкта призведе до {{jsxref("TypeError")}}. Що до `valueOf()` і `toString()`, то якщо якийсь із цих методів поверне об'єкт, то таке повернене значення ігнорується, і натомість використовується повернене значення іншого методу. Якщо такого методу немає, або якщо жоден з методів не повернув примітива, то викидається {{jsxref("TypeError")}}. Наприклад, у наступному коді: +Метод `[Symbol.toPrimitive]()`, якщо є, мусить повертати примітив: повернення об'єкта призведе до {{jsxref("TypeError")}}. Що до `valueOf()` і `toString()`, то якщо якийсь із цих методів поверне об'єкт, то таке повернене значення ігнорується, і натомість використовується повернене значення іншого методу. Якщо такого методу немає, або якщо жоден з методів не повернув примітива, то викидається {{jsxref("TypeError")}}. Наприклад, у наступному коді: ```js console.log({} + []); // "[object Object]" ``` -Neither `{}` nor `[]` has a `[@@toPrimitive]()` method. Both `{}` and `[]` inherit `valueOf()` from {{jsxref("Object.prototype.valueOf")}}, which returns the object itself. Since the return value is an object, it is ignored. Therefore, `toString()` is called instead. [`{}.toString()`](/uk/docs/Web/JavaScript/Reference/Global_Objects/Object/toString) returns `"[object Object]"`, while [`[].toString()`](/uk/docs/Web/JavaScript/Reference/Global_Objects/Array/toString) returns `""`, so the result is their concatenation: `"[object Object]"`. +Neither `{}` nor `[]` has a `[Symbol.toPrimitive]()` method. Both `{}` and `[]` inherit `valueOf()` from {{jsxref("Object.prototype.valueOf")}}, which returns the object itself. Since the return value is an object, it is ignored. Therefore, `toString()` is called instead. [`{}.toString()`](/uk/docs/Web/JavaScript/Reference/Global_Objects/Object/toString) returns `"[object Object]"`, while [`[].toString()`](/uk/docs/Web/JavaScript/Reference/Global_Objects/Array/toString) returns `""`, so the result is their concatenation: `"[object Object]"`. -Метод `[@@toPrimitive]()` завжди має пріоритет над перетворенням на будь-який конкретний примітивний тип. Перетворення на примітив здебільшого працює як перетворення на число, тому що першим викликається `valueOf()`; проте об'єкти з самописними методами `[@@toPrimitive]()` можуть вирішити повернути будь-який примітив. Об'єкти {{jsxref("Date")}} і {{jsxref("Symbol")}} – єдині вбудовані об'єкти, що визначають власні методи `[@@toPrimitive]()`. [`Date.prototype[@@toPrimitive]()`](<(/uk/docs/Web/JavaScript/Reference/Global_Objects/Date/@@toPrimitive)>) обробляє підказку `"default"` як ніби це `"string"`, натомість [`Symbol.prototype[@@toPrimitive]()`](<(/uk/docs/Web/JavaScript/Reference/Global_Objects/Symbol/@@toPrimitive)>) ігнорує підказку і завжди повертає символ. +Метод `[Symbol.toPrimitive]()` завжди має пріоритет над перетворенням на будь-який конкретний примітивний тип. Перетворення на примітив здебільшого працює як перетворення на число, тому що першим викликається `valueOf()`; проте об'єкти з самописними методами `[Symbol.toPrimitive]()` можуть вирішити повернути будь-який примітив. Об'єкти {{jsxref("Date")}} і {{jsxref("Symbol")}} – єдині вбудовані об'єкти, що визначають власні методи `[Symbol.toPrimitive]()`. [`Date.prototype[Symbol.toPrimitive]()`](<(/uk/docs/Web/JavaScript/Reference/Global_Objects/Date/Symbol.toPrimitive)>) обробляє підказку `"default"` як ніби це `"string"`, натомість [`Symbol.prototype[Symbol.toPrimitive]()`](<(/uk/docs/Web/JavaScript/Reference/Global_Objects/Symbol/Symbol.toPrimitive)>) ігнорує підказку і завжди повертає символ. ### Зведення до числового @@ -261,11 +261,11 @@ Neither `{}` nor `[]` has a `[@@toPrimitive]()` method. Both `{}` and `[]` inher Як можна було помітити, є три відмінні шляхи, якими об'єкти можуть бути перетворені на примітиви: -- [Зведення до примітива](#zvedennia-do-prymityva): `[@@toPrimitive]("default")` → `valueOf()` → `toString()` -- [Зведення до числового](#zvedennia-do-chyslovoho), [зведення до числа](/uk/docs/Web/JavaScript/Reference/Global_Objects/Number#zvedennia-do-chysla), [зведення до BigInt](/uk/docs/Web/JavaScript/Reference/Global_Objects/BigInt#zvedennia-do-bigint): `[@@toPrimitive]("number")` → `valueOf()` → `toString()` -- [Зведення до рядка](/uk/docs/Web/JavaScript/Reference/Global_Objects/String#zvedennia-do-riadka): `[@@toPrimitive]("string")` → `toString()` → `valueOf()` +- [Зведення до примітива](#zvedennia-do-prymityva): `[Symbol.toPrimitive]("default")` → `valueOf()` → `toString()` +- [Зведення до числового](#zvedennia-do-chyslovoho), [зведення до числа](/uk/docs/Web/JavaScript/Reference/Global_Objects/Number#zvedennia-do-chysla), [зведення до BigInt](/uk/docs/Web/JavaScript/Reference/Global_Objects/BigInt#zvedennia-do-bigint): `[Symbol.toPrimitive]("number")` → `valueOf()` → `toString()` +- [Зведення до рядка](/uk/docs/Web/JavaScript/Reference/Global_Objects/String#zvedennia-do-riadka): `[Symbol.toPrimitive]("string")` → `toString()` → `valueOf()` -У всіх випадках властивість `[@@toPrimitive]()`, якщо є, мусить бути викличною та повертати примітив, натомість `valueOf` і `toString` ігноруватимуться, якщо не є викличними або повертають об'єкт. У кінці процесу, якщо він успішний, результат гарантовано є примітивом. Після цього результівний примітив підлягає подальшому зведенню, залежно від контексту. +У всіх випадках властивість `[Symbol.toPrimitive]()`, якщо є, мусить бути викличною та повертати примітив, натомість `valueOf` і `toString` ігноруватимуться, якщо не є викличними або повертають об'єкт. У кінці процесу, якщо він успішний, результат гарантовано є примітивом. Після цього результівний примітив підлягає подальшому зведенню, залежно від контексту. ## Дивіться також From f842ff981136df59647be266aaff696ac0622d21 Mon Sep 17 00:00:00 2001 From: Vitalii Perehonchuk Date: Tue, 16 Jul 2024 21:19:20 +0300 Subject: [PATCH 2/5] Update files/uk/web/javascript/data_structures/index.md --- files/uk/web/javascript/data_structures/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/uk/web/javascript/data_structures/index.md b/files/uk/web/javascript/data_structures/index.md index c9cc181610..9b9211356b 100644 --- a/files/uk/web/javascript/data_structures/index.md +++ b/files/uk/web/javascript/data_structures/index.md @@ -77,7 +77,7 @@ console.log(result); // 421 ### Тип Number -Тип {{jsxref("Number")}} є [64-бітним значенням двійкового формату IEEE 754 подвійної точності](/uk/docs/Web/JavaScript/Reference/Global_Objects/Number#koduvannia-number). Він здатний зберігати додатні числа з рухомою комою між 2-1074 ({{jsxref("Number.MIN_VALUE")}}) і 21023 × (2 - 2-52) ({{jsxref("Number.MAX_VALUE")}}), а також від'ємні числа з рухомою комою аналогічного діапазону, але може надійно зберігати цілі числа лише в діапазоні від -(253 − 1) ({{jsxref("Number.MIN_SAFE_INTEGER")}}) до 253 − 1 ({{jsxref("Number.MAX_SAFE_INTEGER")}}). Поза цим діапазоном JavaScript не може надійно представляти цілі числа; замість цього вони представляються у вигляді наближення з рухомою комою подвійної точності. Перевірити число на попадання в діапазон надійних цілих чисел можна за допомогою {{jsxref("Number.isSafeInteger()")}}. +Тип {{jsxref("Number")}} є [64-бітовим значенням двійкового формату IEEE 754 подвійної точності](/uk/docs/Web/JavaScript/Reference/Global_Objects/Number#koduvannia-number). Він здатний зберігати додатні числа з рухомою комою між 2-1074 ({{jsxref("Number.MIN_VALUE")}}) і 21023 × (2 - 2-52) ({{jsxref("Number.MAX_VALUE")}}), а також від'ємні числа з рухомою комою аналогічного діапазону, але може надійно зберігати цілі числа лише в діапазоні від -(253 − 1) ({{jsxref("Number.MIN_SAFE_INTEGER")}}) до 253 − 1 ({{jsxref("Number.MAX_SAFE_INTEGER")}}). Поза цим діапазоном JavaScript не може надійно представляти цілі числа; замість цього вони представляються у вигляді наближення з рухомою комою подвійної точності. Перевірити число на попадання в діапазон надійних цілих чисел можна за допомогою {{jsxref("Number.isSafeInteger()")}}. Значення поза діапазоном, числа якого можна подати з точністю, автоматично перетворюються: From e3003fb9e7fd09c77b9fd720545e523302263692 Mon Sep 17 00:00:00 2001 From: Vitalii Perehonchuk Date: Wed, 17 Jul 2024 17:12:16 +0300 Subject: [PATCH 3/5] Update files/uk/web/javascript/data_structures/index.md Co-authored-by: Alina Listunova --- files/uk/web/javascript/data_structures/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/uk/web/javascript/data_structures/index.md b/files/uk/web/javascript/data_structures/index.md index 9b9211356b..c9cc181610 100644 --- a/files/uk/web/javascript/data_structures/index.md +++ b/files/uk/web/javascript/data_structures/index.md @@ -77,7 +77,7 @@ console.log(result); // 421 ### Тип Number -Тип {{jsxref("Number")}} є [64-бітовим значенням двійкового формату IEEE 754 подвійної точності](/uk/docs/Web/JavaScript/Reference/Global_Objects/Number#koduvannia-number). Він здатний зберігати додатні числа з рухомою комою між 2-1074 ({{jsxref("Number.MIN_VALUE")}}) і 21023 × (2 - 2-52) ({{jsxref("Number.MAX_VALUE")}}), а також від'ємні числа з рухомою комою аналогічного діапазону, але може надійно зберігати цілі числа лише в діапазоні від -(253 − 1) ({{jsxref("Number.MIN_SAFE_INTEGER")}}) до 253 − 1 ({{jsxref("Number.MAX_SAFE_INTEGER")}}). Поза цим діапазоном JavaScript не може надійно представляти цілі числа; замість цього вони представляються у вигляді наближення з рухомою комою подвійної точності. Перевірити число на попадання в діапазон надійних цілих чисел можна за допомогою {{jsxref("Number.isSafeInteger()")}}. +Тип {{jsxref("Number")}} є [64-бітним значенням двійкового формату IEEE 754 подвійної точності](/uk/docs/Web/JavaScript/Reference/Global_Objects/Number#koduvannia-number). Він здатний зберігати додатні числа з рухомою комою між 2-1074 ({{jsxref("Number.MIN_VALUE")}}) і 21023 × (2 - 2-52) ({{jsxref("Number.MAX_VALUE")}}), а також від'ємні числа з рухомою комою аналогічного діапазону, але може надійно зберігати цілі числа лише в діапазоні від -(253 − 1) ({{jsxref("Number.MIN_SAFE_INTEGER")}}) до 253 − 1 ({{jsxref("Number.MAX_SAFE_INTEGER")}}). Поза цим діапазоном JavaScript не може надійно представляти цілі числа; замість цього вони представляються у вигляді наближення з рухомою комою подвійної точності. Перевірити число на попадання в діапазон надійних цілих чисел можна за допомогою {{jsxref("Number.isSafeInteger()")}}. Значення поза діапазоном, числа якого можна подати з точністю, автоматично перетворюються: From 1ecddb2519185582eb88e59f6e7d76e47dfeadb7 Mon Sep 17 00:00:00 2001 From: Vitalii Perehonchuk Date: Wed, 17 Jul 2024 17:14:47 +0300 Subject: [PATCH 4/5] update(JS): web/javascript/data_structures --- files/uk/web/javascript/data_structures/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/uk/web/javascript/data_structures/index.md b/files/uk/web/javascript/data_structures/index.md index c9cc181610..f2fcdcbc95 100644 --- a/files/uk/web/javascript/data_structures/index.md +++ b/files/uk/web/javascript/data_structures/index.md @@ -245,7 +245,7 @@ JavaScript має стандартну бібліотеку вбудованих console.log({} + []); // "[object Object]" ``` -Neither `{}` nor `[]` has a `[Symbol.toPrimitive]()` method. Both `{}` and `[]` inherit `valueOf()` from {{jsxref("Object.prototype.valueOf")}}, which returns the object itself. Since the return value is an object, it is ignored. Therefore, `toString()` is called instead. [`{}.toString()`](/uk/docs/Web/JavaScript/Reference/Global_Objects/Object/toString) returns `"[object Object]"`, while [`[].toString()`](/uk/docs/Web/JavaScript/Reference/Global_Objects/Array/toString) returns `""`, so the result is their concatenation: `"[object Object]"`. +Ані `{}`, ані `[]` не мають методу `[Symbol.toPrimitive]()`. І `{}`, і `[]` успадковують `valueOf()` від {{jsxref("Object.prototype.valueOf")}}, що повертає сам об'єкт. Оскільки повернене значення є об'єктом, воно ігнорується. Таким чином, далі викликається `toString()`. [`{}.toString()`](/uk/docs/Web/JavaScript/Reference/Global_Objects/Object/toString) повертає `"[object Object]"`, а [`[].toString()`](/uk/docs/Web/JavaScript/Reference/Global_Objects/Array/toString) повертає `""`, тож результат – це їхнє зчеплення: `"[object Object]"`. Метод `[Symbol.toPrimitive]()` завжди має пріоритет над перетворенням на будь-який конкретний примітивний тип. Перетворення на примітив здебільшого працює як перетворення на число, тому що першим викликається `valueOf()`; проте об'єкти з самописними методами `[Symbol.toPrimitive]()` можуть вирішити повернути будь-який примітив. Об'єкти {{jsxref("Date")}} і {{jsxref("Symbol")}} – єдині вбудовані об'єкти, що визначають власні методи `[Symbol.toPrimitive]()`. [`Date.prototype[Symbol.toPrimitive]()`](<(/uk/docs/Web/JavaScript/Reference/Global_Objects/Date/Symbol.toPrimitive)>) обробляє підказку `"default"` як ніби це `"string"`, натомість [`Symbol.prototype[Symbol.toPrimitive]()`](<(/uk/docs/Web/JavaScript/Reference/Global_Objects/Symbol/Symbol.toPrimitive)>) ігнорує підказку і завжди повертає символ. From 070d04f6cb0eba65ea7bd34be1a6c48aab9d1428 Mon Sep 17 00:00:00 2001 From: Vitalii Perehonchuk Date: Wed, 17 Jul 2024 17:15:42 +0300 Subject: [PATCH 5/5] update(JS): web/javascript/data_structures --- files/uk/web/javascript/data_structures/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/uk/web/javascript/data_structures/index.md b/files/uk/web/javascript/data_structures/index.md index f2fcdcbc95..f4a2c7fc31 100644 --- a/files/uk/web/javascript/data_structures/index.md +++ b/files/uk/web/javascript/data_structures/index.md @@ -139,7 +139,7 @@ Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2; // true, адже - Легко формувати складні рядки за допомогою зчеплення. - Рядки легко зневаджувати (те, що надруковано – завжди саме те, що знаходиться в рядку). -- Рядки є спільним знаменником багатьох API ([полів введення](/uk/docs/Web/API/HTMLInputElement), значень [локального сховища](/uk/docs/Web/API/Web_Storage_API), відповідей [`fetch()`](/uk/docs/Web/API/fetch) при використанні {{domxref("Response.text()")}} тощо), і може здаватись спокусливим працювати лише з рядками. +- Рядки є спільним знаменником багатьох API ([полів введення](/uk/docs/Web/API/HTMLInputElement), значень [локального сховища](/uk/docs/Web/API/Web_Storage_API), відповідей [`fetch()`](/uk/docs/Web/API/Window/fetch) при використанні {{domxref("Response.text()")}} тощо), і може здаватись спокусливим працювати лише з рядками. За допомогою певних домовленостей можна представити будь-яку структуру даних як рядок. Проте це не робить таку ідею доброю. Наприклад, можна імітувати список за допомогою розділювача (при тому, що масив JavaScript є більш підхожим). На жаль, коли розділювач зустрічається в одному з елементів "списку", список буде зламано. Можна обрати символ екранування тощо. Все це вимагає домовленостей і накладає зайвий тягар підтримування.