WARNING: THIS SITE IS A MIRROR OF GITHUB.COM / IT CANNOT LOGIN OR REGISTER ACCOUNTS / THE CONTENTS ARE PROVIDED AS-IS / THIS SITE ASSUMES NO RESPONSIBILITY FOR ANY DISPLAYED CONTENT OR LINKS / IF YOU FOUND SOMETHING MAY NOT GOOD FOR EVERYONE, CONTACT ADMIN AT ilovescratch@foxmail.com
Skip to content
Open
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
20 changes: 10 additions & 10 deletions manuscript/A-Other-Changes.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
# Додаток А: Дрібніші зміни

Поруч з масштабними змінами, про які вже розповідалось у цій книзі, ECMAScript 6 вводить ряд інших змін, які є менш важливими, проте такими ж корисними для покращення JavaScript. Ці зміни включають покращення цілих чисел, введення нових методів для обчислень, вдосконалення Unicode–ідентифікаторів та формалізація властивості `__proto__`. Я опишу їх у цьому додатку.
Поруч з масштабними змінами, про які вже розповідалось у цій книзі, ECMAScript 6 вводить ряд інших змін, які є менш важливими, проте такими ж корисними для покращення JavaScript. Ці зміни включають покращення цілих чисел, введення нових методів для обчислень, вдосконалення Unicode–ідентифікаторів та формалізацію властивості `__proto__`. Я опишу їх у цьому додатку.

## Робота з цілими числами

JavaScript використовує систему кодування IEEE 754 для представлення цілих та дійсних чисел, яка була причиною численних непорозумінь протягом багатьох років. Мова докладає великих зусиль, щоб гарантувати, що розробникам не потрібно турбуватися про деталі кодування чисел, але проблеми все ще з’являються час від часу. ECMAScript 6 прагне вирішити це, роблячи цілі числа легшими для ідентифікації та роботи з ними.

### Ідентифікація цілих чисел

Поперше, ECMAScript 6 додає метод `Number.isInteger()`, який може визначити чи значення відображає ціле число у JavaScript. Оскільки JavaScript використовує IEEE 754 для відображення чисел обох типів, дійсні та цілі числа зберігаються порізному. Метод `Number.isInteger()` використовує переваги цього і коли метод викликається для значення, рушій JavaScript дивиться на представлення значення, щоб визначити чи значення є цілим числом. Це означає, що для чисел, які виглядають як дійсні, проте зберігаються як цілі, метод `Number.isInteger()` поверне `true`. Наприклад:
По-перше, ECMAScript 6 додає метод `Number.isInteger()`, який може визначити, чи значення відображає ціле число у JavaScript. Оскільки JavaScript використовує IEEE 754 для відображення чисел обох типів, дійсні та цілі числа зберігаються по-різному. Метод `Number.isInteger()` використовує переваги цього і коли метод викликається для значення, рушій JavaScript дивиться на представлення значення, щоб визначити, чи значення є цілим числом. Це означає, що для чисел, які виглядають як дійсні, проте зберігаються як цілі, метод `Number.isInteger()` поверне `true`. Наприклад:

```js
console.log(Number.isInteger(25)); // true
Expand All @@ -20,7 +20,7 @@ console.log(Number.isInteger(25.1)); // false

### Безпечні цілі числа

IEEE 754 може точно представляти цілі числа між -2^53^ та 2^53^, а поза цим “безпечним” проміжком, двійкове представлення починають повторно використовуватись для декількох числових значень. Це означає, що JavaScript може безпечно, представляти цілі числа у проміжку IEEE 754. Наприклад, розгляньте такий код:
IEEE 754 може точно представляти цілі числа між -2^53^ та 2^53^, а поза цим “безпечним” проміжком, двійкові представлення починають повторно використовуватись для декількох числових значень. Це означає, що JavaScript може безпечно представляти цілі числа у проміжку IEEE 754. Наприклад, розгляньте такий код:

```js
console.log(Math.pow(2, 53)); // 9007199254740992
Expand All @@ -44,13 +44,13 @@ console.log(Number.isSafeInteger(outside)); // false

Число `inside` є найбільшим безпечним цілим числом, тому `true` повертається з обох методів `Number.isInteger()` та `Number.isSafeInteger()`. Число `outside` є першим підозрілим цілочисельним значенням і воно не вважається безпечним, не зважаючи на те, що воно залишається цілим числом.

Зазвичай, за виконання арифметичних операцій або порівнянь, вам потрібно працювати лише з безпечними цілими числами, тому використовувати `Number.isSafeInteger()` як частину валідації вводу було б хорошою ідеєю.
Зазвичай, при виконанні арифметичних операцій або порівнянь вам потрібно працювати лише з безпечними цілими числами, тому використовувати `Number.isSafeInteger()` як частину валідації вводу було б хорошою ідеєю.

## Нові математичні методи

Новий акцент на іграх та графіці, який призвів до того, ECMAScript 6 додав у JavaScript типізовані масиви, також призвів до усвідомлення того, що рушії JavaScript можуть робити багато математичних обчислень більш ефективно. Проте стратегії оптимізації, як от asm.js, які для підвищення швидкодії працюють на підмножині JavaScript, потребують більше інформації для виконання обчислень найшвидшим шляхом. Наприклад, розуміння того, коли числа мають трактуватись як 32-бітні цілі числа або 64-бітні дійсні числа є важливим для апаратних операцій, які є набагато швидшими за програмні операції.
Новий акцент на іграх та графіці, який призвів до того, що ECMAScript 6 додав у JavaScript типізовані масиви, також призвів до усвідомлення того, що рушії JavaScript можуть робити багато математичних обчислень більш ефективно. Проте стратегії оптимізації, як от asm.js, які для підвищення швидкодії працюють на підмножині JavaScript, потребують більше інформації для виконання обчислень найшвидшим шляхом. Наприклад, розуміння того, коли числа мають трактуватись як 32-бітні цілі числа або 64-бітні дійсні числа, є важливим для апаратних операцій, які є набагато швидшими за програмні операції.

В результаті, ECMAScript 6 додає кілька методів у об’єкт `Math`, для підвищення швидкості загальних математичних обчислень. Підвищення швидкості загальних обчислень також покращує загальну швидкість додатків, які виконують велику кількість обчислень, як от графічні програми. Нові методи перелічені нижче:
В результаті, ECMAScript 6 додає кілька методів в об’єкт `Math`, для підвищення швидкості загальних математичних обчислень. Підвищення швидкості загальних обчислень також покращує загальну швидкість додатків, які виконують велику кількість обчислень, як от графічні програми. Нові методи перелічені нижче:

* `Math.acosh(x)` повертає обернений гіперболічний косинус `x`;
* `Math.asinh(x)` повертає обернений гіперболічний синус `x`;
Expand All @@ -72,9 +72,9 @@ console.log(Number.isSafeInteger(outside)); // false

Детальне пояснення кожного нового методу та того, що вони роблять, виходить за межі цієї книги. Проте, якщо ваш додаток має робити загальні обчислення, не забудьте перевірити нові методи `Math` перед тим, як писати імплементацію самостійно.

## Unicodeідентифікатори
## Unicode-ідентифікатори

ECMAScript 6 пропонує кращу підтримку Unicode, ніж попередні версії JavaScript, і він також змінює те, які символи можуть використовуватись в якості ідентифікаторів. У ECMAScript 5 вже можливо було використовувати Unicodeпослідовності для ідентифікаторів. Наприклад:
ECMAScript 6 пропонує кращу підтримку Unicode, ніж попередні версії JavaScript, і він також змінює те, які символи можуть використовуватись в якості ідентифікаторів. У ECMAScript 5 вже можливо було використовувати Unicode-послідовності для ідентифікаторів. Наприклад:

```js
// Валідно у ECMAScript 5 та 6
Expand Down Expand Up @@ -109,9 +109,9 @@ console.log(\u{61}); // "abc"

## Формалізація властивості `__proto__`

Ще до того як ECMAScript 5 було завершено, декілька рушіїв JavaScript вже імплементували власну властивість `__proto__`, яка може використовуватись для отримання та встановлення властивості `[[Prototype]]`. Практично `__proto__` був передвісник для методів `Object.getPrototypeOf()` та `Object.setPrototypeOf()`. Очікування того, що рушії JavaScript видалять цю властивість не має змісту (було багато популярних JavaScript–бібліотек, які використовували `__proto__`), тому ECMAScript 6 також формалізує поведінку `__proto__`. Проте формалізація з’являється в Додатку Б до ECMA-262 разом з таким попередженням:
Ще до того як ECMAScript 5 було завершено, декілька рушіїв JavaScript вже імплементували власну властивість `__proto__`, яка може використовуватись для отримання та встановлення властивості `[[Prototype]]`. Практично `__proto__` був передвісник для методів `Object.getPrototypeOf()` та `Object.setPrototypeOf()`. Очікування того, що рушії JavaScript видалять цю властивість, не має змісту (було багато популярних JavaScript–бібліотек, які використовували `__proto__`), тому ECMAScript 6 також формалізує поведінку `__proto__`. Проте формалізація з’являється в Додатку Б до ECMA-262 разом з таким попередженням:

> Ці нововведення не вважаються частиною ядра мови ECMAScript. Програмістам не слід використовувати або покладатись на існування цих нововведень та особливостей при написанні нового коду на ECMAScript. Імплементаціям ECMAScript не рекомендується реалізувати ці нововведення якщо ця імплементація не є частиною веб–браузера або не потребує запуску застарілого ECMAScript–коду з яким зустрічаються веб–браузери.
> Ці нововведення не вважаються частиною ядра мови ECMAScript. Програмістам не слід використовувати або покладатись на існування цих нововведень та особливостей при написанні нового коду на ECMAScript. Імплементаціям ECMAScript не рекомендується реалізувати ці нововведення, якщо ця імплементація не є частиною веб–браузера або не потребує запуску застарілого ECMAScript–коду, з яким зустрічаються веб–браузери.

Специфікація ECMAScript рекомендує використання `Object.getPrototypeOf()` та `Object.setPrototypeOf()` замість `__proto__`, оскільки `__proto__` має такі характеристики:

Expand Down