Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 6d39ea2

Browse files
committed
Merge branch 'master' of github.com:javascript-tutorial/en.javascript.info into sync-34a80e70
2 parents e76dce9 + 34a80e7 commit 6d39ea2

File tree

15 files changed

+77
-70
lines changed

15 files changed

+77
-70
lines changed

‎.github/FUNDING.yml‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
github: iliakan

‎1-js/02-first-steps/05-types/article.md‎

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -94,13 +94,6 @@ const bigInt = 1234567890123456789012345678901234567890n;
9494

9595
As `BigInt` numbers are rarely needed, we don't cover them here, but devoted them a separate chapter <info:bigint>. Read it when you need such big numbers.
9696
97-
98-
```smart header="Compatibility issues"
99-
Right now, `BigInt` is supported in Firefox/Chrome/Edge/Safari, but not in IE.
100-
```
101-
102-
You can check [*MDN* BigInt compatibility table](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt#Browser_compatibility) to know which versions of a browser are supported.
103-
10497
## String
10598
10699
A string in JavaScript must be surrounded by quotes.

‎1-js/03-code-quality/06-polyfills/article.md‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@ JavaScript is a highly dynamic language. Scripts may add/modify any function, ev
7373
7474
Two interesting polyfill libraries are:
7575
- [core js](https://github.com/zloirock/core-js) that supports a lot, allows to include only needed features.
76-
- [polyfill.io](https://polyfill.io/) service that provides a script with polyfills, depending on the features and user's browser.
7776
7877
7978
## Summary

‎1-js/04-object-basics/04-object-methods/8-chain-calls/task.md‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ importance: 2
44

55
# Chaining
66

7-
There's a `ladder` object that allows to go up and down:
7+
There's a `ladder` object that allows you to go up and down:
88

99
```js
1010
let ladder = {
@@ -21,7 +21,7 @@ let ladder = {
2121
};
2222
```
2323

24-
Now, if we need to make several calls in sequence, can do it like this:
24+
Now, if we need to make several calls in sequence, we can do it like this:
2525

2626
```js
2727
ladder.up();
@@ -32,10 +32,10 @@ ladder.down();
3232
ladder.showStep(); // 0
3333
```
3434

35-
Modify the code of `up`, `down` and `showStep` to make the calls chainable, like this:
35+
Modify the code of `up`, `down`, and `showStep` to make the calls chainable, like this:
3636

3737
```js
3838
ladder.up().up().down().showStep().down().showStep(); // shows 1 then 0
3939
```
4040

41-
Such approach is widely used across JavaScript libraries.
41+
Such an approach is widely used across JavaScript libraries.

‎1-js/04-object-basics/09-object-toprimitive/article.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ let obj = {
253253
}
254254
};
255255

256-
alert(obj + 2); // 22 ("2" + 2), conversion to primitive returned a string => concatenation
256+
alert(obj + 2); // "22" ("2" + 2), conversion to primitive returned a string => concatenation
257257
```
258258

259259
## Summary

‎1-js/05-data-types/02-number/article.md‎

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ In modern JavaScript, there are two types of numbers:
44

55
1. Regular numbers in JavaScript are stored in 64-bit format [IEEE-754](https://en.wikipedia.org/wiki/IEEE_754), also known as "double precision floating point numbers". These are numbers that we're using most of the time, and we'll talk about them in this chapter.
66

7-
2. BigInt numbers represent integers of arbitrary length. They are sometimes needed because a regular integer number can't safely exceed <code>(2<sup>53</sup>-1)</code> or be less than <code>-(2<sup>53</sup>-1)</code>, as we mentioned earlier in the chapter <info:types>. As bigints are used in few special areas, we devote them a special chapter <info:bigint>.
7+
2. BigInt numbers represent integers of arbitrary length. They are sometimes needed because a regular integer number can't safely exceed <code>(2<sup>53</sup>-1)</code> or be less than <code>-(2<sup>53</sup>-1)</code>, as we mentioned earlier in the chapter <info:types>. As bigints are used in a few special areas, we devote them to a special chapter <info:bigint>.
88

99
So here we'll talk about regular numbers. Let's expand our knowledge of them.
1010

@@ -41,7 +41,7 @@ In other words, `e` multiplies the number by `1` with the given zeroes count.
4141
1.23e6 === 1.23 * 1000000; // e6 means *1000000
4242
```
4343

44-
Now let's write something very small. Say, 1 microsecond (onemillionth of a second):
44+
Now let's write something very small. Say, 1 microsecond (one-millionth of a second):
4545

4646
```js
4747
let mсs = 0.000001;
@@ -103,13 +103,13 @@ alert( num.toString(16) ); // ff
103103
alert( num.toString(2) ); // 11111111
104104
```
105105

106-
The `base` can vary from `2` to `36`. By default it's `10`.
106+
The `base` can vary from `2` to `36`. By default, it's `10`.
107107

108108
Common use cases for this are:
109109

110110
- **base=16** is used for hex colors, character encodings etc, digits can be `0..9` or `A..F`.
111111
- **base=2** is mostly for debugging bitwise operations, digits can be `0` or `1`.
112-
- **base=36** is the maximum, digits can be `0..9` or `A..Z`. The whole latin alphabet is used to represent a number. A funny, but useful case for `36` is when we need to turn a long numeric identifier into something shorter, for example to make a short url. Can simply represent it in the numeral system with base `36`:
112+
- **base=36** is the maximum, digits can be `0..9` or `A..Z`. The whole Latin alphabet is used to represent a number. A funny, but useful case for `36` is when we need to turn a long numeric identifier into something shorter, for example, to make a short url. Can simply represent it in the numeral system with base `36`:
113113

114114
```js run
115115
alert( 123456..toString(36) ); // 2n9c
@@ -137,7 +137,7 @@ There are several built-in functions for rounding:
137137
: Rounds up: `3.1` becomes `4`, and `-1.1` becomes `-1`.
138138

139139
`Math.round`
140-
: Rounds to the nearest integer: `3.1` becomes `3`, `3.6` becomes `4`, the middle case: `3.5` rounds up to `4` too.
140+
: Rounds to the nearest integer: `3.1` becomes `3`, `3.6` becomes `4`. Inthe middle cases `3.5` rounds up to `4`, and `-3.5` rounds up to `-3`.
141141

142142
`Math.trunc` (not supported by Internet Explorer)
143143
: Removes anything after the decimal point without rounding: `3.1` becomes `3`, `-1.1` becomes `-1`.
@@ -147,8 +147,10 @@ Here's the table to summarize the differences between them:
147147
| | `Math.floor` | `Math.ceil` | `Math.round` | `Math.trunc` |
148148
|---|---------|--------|---------|---------|
149149
|`3.1`| `3` | `4` | `3` | `3` |
150+
|`3.5`| `3` | `4` | `4` | `3` |
150151
|`3.6`| `3` | `4` | `4` | `3` |
151152
|`-1.1`| `-2` | `-1` | `-1` | `-1` |
153+
|`-1.5`| `-2` | `-1` | `-1` | `-1` |
152154
|`-1.6`| `-2` | `-1` | `-2` | `-1` |
153155
154156
@@ -188,7 +190,7 @@ There are two ways to do so:
188190
alert( num.toFixed(5) ); // "12.34000", added zeroes to make exactly 5 digits
189191
```
190192

191-
We can convert it to a number using the unary plus or a `Number()` call, e.g write `+num.toFixed(5)`.
193+
We can convert it to a number using the unary plus or a `Number()` call, e.g. write `+num.toFixed(5)`.
192194

193195
## Imprecise calculations
194196

@@ -222,7 +224,13 @@ But why does this happen?
222224

223225
A number is stored in memory in its binary form, a sequence of bits - ones and zeroes. But fractions like `0.1`, `0.2` that look simple in the decimal numeric system are actually unending fractions in their binary form.
224226

225-
What is `0.1`? It is one divided by ten `1/10`, one-tenth. In decimal numeral system such numbers are easily representable. Compare it to one-third: `1/3`. It becomes an endless fraction `0.33333(3)`.
227+
```js run
228+
alert(0.1.toString(2)); // 0.0001100110011001100110011001100110011001100110011001101
229+
alert(0.2.toString(2)); // 0.001100110011001100110011001100110011001100110011001101
230+
alert((0.1 + 0.2).toString(2)); // 0.0100110011001100110011001100110011001100110011001101
231+
```
232+
233+
What is `0.1`? It is one divided by ten `1/10`, one-tenth. In the decimal numeral system, such numbers are easily representable. Compare it to one-third: `1/3`. It becomes an endless fraction `0.33333(3)`.
226234

227235
So, division by powers `10` is guaranteed to work well in the decimal system, but division by `3` is not. For the same reason, in the binary numeral system, the division by powers of `2` is guaranteed to work, but `1/10` becomes an endless binary fraction.
228236

@@ -242,7 +250,7 @@ That's why `0.1 + 0.2` is not exactly `0.3`.
242250
```smart header="Not only JavaScript"
243251
The same issue exists in many other programming languages.
244252

245-
PHP, Java, C, Perl, Ruby give exactly the same result, because they are based on the same numeric format.
253+
PHP, Java, C, Perl, and Ruby give exactly the same result, because they are based on the same numeric format.
246254
```
247255

248256
Can we work around the problem? Sure, the most reliable method is to round the result with the help of a method [toFixed(n)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed):
@@ -266,7 +274,7 @@ alert( (0.1 * 10 + 0.2 * 10) / 10 ); // 0.3
266274
alert( (0.28 * 100 + 0.14 * 100) / 100); // 0.4200000000000001
267275
```
268276

269-
So, multiply/divide approach reduces the error, but doesn't remove it totally.
277+
So, the multiply/divide approach reduces the error, but doesn't remove it totally.
270278

271279
Sometimes we could try to evade fractions at all. Like if we're dealing with a shop, then we can store prices in cents instead of dollars. But what if we apply a discount of 30%? In practice, totally evading fractions is rarely possible. Just round them to cut "tails" when needed.
272280

@@ -288,7 +296,7 @@ Another funny consequence of the internal representation of numbers is the exist
288296

289297
That's because a sign is represented by a single bit, so it can be set or not set for any number including a zero.
290298

291-
In most cases the distinction is unnoticeable, because operators are suited to treat them as the same.
299+
In most cases, the distinction is unnoticeable, because operators are suited to treat them as the same.
292300
```
293301

294302
## Tests: isFinite and isNaN
@@ -337,7 +345,7 @@ Please note that an empty or a space-only string is treated as `0` in all numeri
337345
````smart header="`Number.isNaN` and `Number.isFinite`"
338346
[Number.isNaN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN) and [Number.isFinite](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite) methods are the more "strict" versions of `isNaN` and `isFinite` functions. They do not autoconvert their argument into a number, but check if it belongs to the `number` type instead.
339347

340-
- `Number.isNaN(value)` returns `true` if the argument belongs to the `number` type and it is `NaN`. In any other case it returns `false`.
348+
- `Number.isNaN(value)` returns `true` if the argument belongs to the `number` type and it is `NaN`. In any other case, it returns `false`.
341349

342350
```js run
343351
alert( Number.isNaN(NaN) ); // true
@@ -348,7 +356,7 @@ Please note that an empty or a space-only string is treated as `0` in all numeri
348356
alert( isNaN("str") ); // true, because isNaN converts string "str" into a number and gets NaN as a result of this conversion
349357
```
350358

351-
- `Number.isFinite(value)` returns `true` if the argument belongs to the `number` type and it is not `NaN/Infinity/-Infinity`. In any other case it returns `false`.
359+
- `Number.isFinite(value)` returns `true` if the argument belongs to the `number` type and it is not `NaN/Infinity/-Infinity`. In any other case, it returns `false`.
352360

353361
```js run
354362
alert( Number.isFinite(123) ); // true
@@ -367,7 +375,7 @@ In a way, `Number.isNaN` and `Number.isFinite` are simpler and more straightforw
367375
There is a special built-in method `Object.is` that compares values like `===`, but is more reliable for two edge cases:
368376

369377
1. It works with `NaN`: `Object.is(NaN, NaN) === true`, that's a good thing.
370-
2. Values `0` and `-0` are different: `Object.is(0, -0) === false`, technically that's correct, because internally the number has a sign bit that may be different even if all other bits are zeroes.
378+
2. Values `0` and `-0` are different: `Object.is(0, -0) === false`, technically that's correct because internally the number has a sign bit that may be different even if all other bits are zeroes.
371379

372380
In all other cases, `Object.is(a, b)` is the same as `a === b`.
373381

@@ -385,7 +393,7 @@ alert( +"100px" ); // NaN
385393

386394
The sole exception is spaces at the beginning or at the end of the string, as they are ignored.
387395

388-
But in real life we often have values in units, like `"100px"` or `"12pt"` in CSS. Also in many countries the currency symbol goes after the amount, so we have `"19€"` and would like to extract a numeric value out of that.
396+
But in real life, we often have values in units, like `"100px"` or `"12pt"` in CSS. Also in many countries, the currency symbol goes after the amount, so we have `"19€"` and would like to extract a numeric value out of that.
389397

390398
That's what `parseInt` and `parseFloat` are for.
391399

@@ -479,4 +487,4 @@ For fractions:
479487

480488
More mathematical functions:
481489

482-
- See the [Math](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Math) object when you need them. The library is very small, but can cover basic needs.
490+
- See the [Math](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Math) object when you need them. The library is very small but can cover basic needs.

‎1-js/05-data-types/04-array/article.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -426,7 +426,7 @@ let matrix = [
426426
[7, 8, 9]
427427
];
428428

429-
alert( matrix[1][1] ); // 5, the central element
429+
alert( matrix[0][1] ); // 2, the second value of the first inner array
430430
```
431431

432432
## toString

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /