Skip to content

Commit 571d0fd

Browse files
committed
Merge branch 'master' of github.com:javascript-tutorial/en.javascript.info into sync-3a0b3f4e
2 parents 2c00b56 + 3a0b3f4 commit 571d0fd

File tree

14 files changed

+60
-50
lines changed

14 files changed

+60
-50
lines changed

1-js/01-getting-started/2-manuals-specifications/article.md

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,15 @@ A new specification version is released every year. In-between these releases, t
1313

1414
To read about new bleeding-edge features, including those that are "almost standard" (so-called "stage 3"), see proposals at <https://github.com/tc39/proposals>.
1515

16-
Also, if you're in developing for the browser, then there are other specs covered in the [second part](info:browser-environment) of the tutorial.
16+
Also, if you're in developing for the browser, then there are other specifications covered in the [second part](info:browser-environment) of the tutorial.
1717

1818
## Manuals
1919

20-
- **MDN (Mozilla) JavaScript Reference** is a manual with examples and other information. It's great to get in-depth information about individual language functions, methods etc.
20+
- **MDN (Mozilla) JavaScript Reference** is the main manual with examples and other information. It's great to get in-depth information about individual language functions, methods etc.
2121

2222
One can find it at <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference>.
2323

24-
Although, it's often best to use an internet search instead. Just use "MDN [term]" in the query, e.g. <https://google.com/search?q=MDN+parseInt> to search for `parseInt` function.
25-
26-
27-
- **MSDN** – Microsoft manual with a lot of information, including JavaScript (often referred to as JScript). If one needs something specific to Internet Explorer, better go there: <http://msdn.microsoft.com/>.
28-
29-
Also, we can use an internet search with phrases such as "RegExp MSDN" or "RegExp MSDN jscript".
24+
Although, it's often best to use an internet search instead. Just use "MDN [term]" in the query, e.g. <https://google.com/search?q=MDN+parseInt> to search for `parseInt` function.
3025

3126
## Compatibility tables
3227

1-js/03-code-quality/02-coding-style/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ There are two types of indents:
116116
117117
One advantage of spaces over tabs is that spaces allow more flexible configurations of indents than the tab symbol.
118118
119-
For instance, we can align the arguments with the opening bracket, like this:
119+
For instance, we can align the parameters with the opening bracket, like this:
120120
121121
```js no-beautify
122122
show(parameters,

1-js/03-code-quality/02-coding-style/code-style.svg

Lines changed: 1 addition & 1 deletion
Loading

1-js/04-object-basics/03-garbage-collection/article.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ Simply put, "reachable" values are those that are accessible or usable somehow.
1414

1515
For instance:
1616

17-
- Local variables and parameters of the current function.
18-
- Variables and parameters for other functions on the current chain of nested calls.
17+
- The currently executing function, its local variables and parameters.
18+
- Other functions on the current chain of nested calls, their local variables and parameters.
1919
- Global variables.
2020
- (there are some other, internal ones as well)
2121

1-js/04-object-basics/04-object-methods/7-calculator/_js.view/test.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@ describe("calculator", function() {
1515
afterEach(function() {
1616
prompt.restore();
1717
});
18+
19+
it('the read get two values and saves them as object properties', function () {
20+
assert.equal(calculator.a, 2);
21+
assert.equal(calculator.b, 3);
22+
});
1823

1924
it("the sum is 5", function() {
2025
assert.equal(calculator.sum(), 5);

1-js/04-object-basics/06-constructor-new/2-calculator-constructor/_js.view/test.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@ describe("calculator", function() {
1010
calculator = new Calculator();
1111
calculator.read();
1212
});
13+
14+
it("the read method asks for two values using prompt and remembers them in object properties", function() {
15+
assert.equal(calculator.a, 2);
16+
assert.equal(calculator.b, 3);
17+
});
1318

1419
it("when 2 and 3 are entered, the sum is 5", function() {
1520
assert.equal(calculator.sum(), 5);

1-js/04-object-basics/06-constructor-new/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ The syntax from this section is rarely used, skip it unless you want to know eve
9191

9292
Inside a function, we can check whether it was called with `new` or without it, using a special `new.target` property.
9393

94-
It is empty for regular calls and equals the function if called with `new`:
94+
It is undefined for regular calls and equals the function if called with `new`:
9595

9696
```js run
9797
function User() {

1-js/04-object-basics/07-optional-chaining/article.md

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,12 @@ That's why the optional chaining `?.` was added to the language. To solve this p
7474

7575
## Optional chaining
7676

77-
The optional chaining `?.` stops the evaluation if the part before `?.` is `undefined` or `null` and returns that part.
77+
The optional chaining `?.` stops the evaluation if the value before `?.` is `undefined` or `null` and returns `undefined`.
7878

7979
**Further in this article, for brevity, we'll be saying that something "exists" if it's not `null` and not `undefined`.**
8080

8181
In other words, `value?.prop`:
82-
- is the same as `value.prop` if `value` exists,
82+
- works as `value.prop`, if `value` exists,
8383
- otherwise (when `value` is `undefined/null`) it returns `undefined`.
8484

8585
Here's the safe way to access `user.address.street` using `?.`:
@@ -103,7 +103,7 @@ alert( user?.address.street ); // undefined
103103
104104
Please note: the `?.` syntax makes optional the value before it, but not any further.
105105
106-
E.g. in `user?.address.street.name` the `?.` allows `user` to be `null/undefined`, but it's all it does. Further properties are accessed in a regular way. If we want some of them to be optional, then we'll need to replace more `.` with `?.`.
106+
E.g. in `user?.address.street.name` the `?.` allows `user` to safely be `null/undefined` (and returns `undefined` in that case), but that's only for `user`. Further properties are accessed in a regular way. If we want some of them to be optional, then we'll need to replace more `.` with `?.`.
107107
108108
```warn header="Don't overuse the optional chaining"
109109
We should use `?.` only where it's ok that something doesn't exist.
@@ -173,18 +173,16 @@ Then `?.()` checks the left part: if the admin function exists, then it runs (th
173173
The `?.[]` syntax also works, if we'd like to use brackets `[]` to access properties instead of dot `.`. Similar to previous cases, it allows to safely read a property from an object that may not exist.
174174
175175
```js run
176+
let key = "firstName";
177+
176178
let user1 = {
177179
firstName: "John"
178180
};
179181

180-
let user2 = null; // Imagine, we couldn't authorize the user
181-
182-
let key = "firstName";
182+
let user2 = null;
183183

184184
alert( user1?.[key] ); // John
185185
alert( user2?.[key] ); // undefined
186-
187-
alert( user1?.[key]?.something?.not?.existing); // undefined
188186
```
189187
190188
Also we can use `?.` with `delete`:

1-js/04-object-basics/08-symbol/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ There will be no conflict between our and their identifiers, because symbols are
109109

110110
...But if we used a string `"id"` instead of a symbol for the same purpose, then there *would* be a conflict:
111111

112-
```js run
112+
```js
113113
let user = { name: "John" };
114114

115115
// Our script uses "id" property

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

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,29 @@ Imagine we need to write 1 billion. The obvious way is:
1616
let billion = 1000000000;
1717
```
1818

19-
But in real life, we usually avoid writing a long string of zeroes as it's easy to mistype. Also, we are lazy. We will usually write something like `"1bn"` for a billion or `"7.3bn"` for 7 billion 300 million. The same is true for most large numbers.
19+
We also can use underscore `_` as the separator:
2020

21-
In JavaScript, we shorten a number by appending the letter `"e"` to the number and specifying the zeroes count:
21+
```js
22+
let billion = 1_000_000_000;
23+
```
24+
25+
Here the underscore `_` plays the role of the "syntactic sugar", it makes the number more readable. The JavaScript engine simply ignores `_` between digits, so it's exactly the same one billion as above.
26+
27+
In real life though, we try to avoid writing long sequences of zeroes. We're too lazy for that. We'll try to write something like `"1bn"` for a billion or `"7.3bn"` for 7 billion 300 million. The same is true for most large numbers.
28+
29+
In JavaScript, we can shorten a number by appending the letter `"e"` to it and specifying the zeroes count:
2230

2331
```js run
2432
let billion = 1e9; // 1 billion, literally: 1 and 9 zeroes
2533

26-
alert( 7.3e9 ); // 7.3 billions (7,300,000,000)
34+
alert( 7.3e9 ); // 7.3 billions (same as 7300000000 or 7_300_000_000)
2735
```
2836

29-
In other words, `"e"` multiplies the number by `1` with the given zeroes count.
37+
In other words, `e` multiplies the number by `1` with the given zeroes count.
3038

3139
```js
32-
1e3 = 1 * 1000
33-
1.23e6 = 1.23 * 1000000
40+
1e3 = 1 * 1000 // e3 means *1000
41+
1.23e6 = 1.23 * 1000000 // e6 means *1000000
3442
```
3543

3644
Now let's write something very small. Say, 1 microsecond (one millionth of a second):
@@ -125,7 +133,7 @@ There are several built-in functions for rounding:
125133
: Rounds up: `3.1` becomes `4`, and `-1.1` becomes `-1`.
126134

127135
`Math.round`
128-
: Rounds to the nearest integer: `3.1` becomes `3`, `3.6` becomes `4` and `-1.1` becomes `-1`.
136+
: Rounds to the nearest integer: `3.1` becomes `3`, `3.6` becomes `4`, the middle case: `3.5` rounds up to `4` too.
129137

130138
`Math.trunc` (not supported by Internet Explorer)
131139
: Removes anything after the decimal point without rounding: `3.1` becomes `3`, `-1.1` becomes `-1`.

0 commit comments

Comments
 (0)