You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/01-getting-started/4-devtools/article.md
-1
Original file line number
Diff line number
Diff line change
@@ -8,7 +8,6 @@
8
8
9
9
മിക്ക ഡവലപ്പർമാരും ഡെവലപ്മെന്റിനായി Chrome അല്ലെങ്കിൽ Firefox ആയിരിക്കുo ആശ്രയിക്കുന്നത്, കാരണം ആ ബ്രൗസറുകളിൽ മികച്ച ഡവലപ്പർ ടൂൾസ് ഉൾപ്പെടുത്തിയിട്ടുണ്ട്. മറ്റ് ബ്രവ്സറുകളും ഡെവലപ്പർ ടൂൾസ് നൽകുന്നു, ചിലപ്പോൾ ചില പ്രത്യേകതകളും അവ നൽകും, പക്ഷേ സാധാരണയായി Chrome അല്ലെങ്കിൽ Firefox ലോട്ടു അനുകരിക്കുകയാണ് അവ ചെയ്യുന്നത്. അതിനാൽ മിക്ക ഡവലപ്പർമാർക്കും അവർക്ക് "ഇഷ്ടപ്പെട്ട" ഒരു ബ്രൗസർ കാണും കൂടാതെ ഒരു ബ്രൗസറിൽ എന്തെങ്കിലും പ്രശ്നമുള്ളതായി തോന്നുകയാണെങ്കിൽ മറ്റുള്ളവയിലേക്കു മാറുകയോ ചെയ്യും.
10
10
11
-
12
11
ഡവലപ്പർ ടൂൾസ് വളരെ ശക്തമാണ്; അവയ്ക്ക് നിരവധി സവിശേഷതകളുണ്ട്. നമുക്കിപ്പോൾ, അവ എങ്ങനെ ഓപ്പൺ ചെയ്യാമെന്നും, തെറ്റുകൾ എങ്ങനെ നോക്കാമെന്നും, javascript command കൾ എങ്ങനെ ടെസ്റ്റ് ചെയ്തു നോക്കാമെന്നും പഠിക്കാം.
Copy file name to clipboardExpand all lines: 1-js/02-first-steps/02-structure/article.md
+16-20
Original file line number
Diff line number
Diff line change
@@ -46,7 +46,7 @@ alert(3 +
46
46
+2);
47
47
```
48
48
49
-
The code outputs `6` because JavaScript does not insert semicolons here. It is intuitively obvious that if the line ends with a plus `"+"`, then it is an "incomplete expression", so the semicolon is not required. And in this case that works as intended.
49
+
The code outputs `6` because JavaScript does not insert semicolons here. It is intuitively obvious that if the line ends with a plus `"+"`, then it is an "incomplete expression", so a semicolon there would be incorrect. And in this case, that works as intended.
50
50
51
51
**But there are situations where JavaScript "fails" to assume a semicolon where it is really needed.**
52
52
@@ -56,40 +56,36 @@ Errors which occur in such cases are quite hard to find and fix.
56
56
If you're curious to see a concrete example of such an error, check this code out:
57
57
58
58
```js run
59
-
[1, 2].forEach(alert)
59
+
alert("Hello");
60
+
61
+
[1, 2].forEach(alert);
60
62
```
61
63
62
-
No need to think about the meaning of the brackets `[]` and `forEach` yet. We'll study them later. For now, just remember the result of the code: it shows `1` then `2`.
64
+
No need to think about the meaning of the brackets `[]` and `forEach` yet. We'll study them later. For now, just remember the result of running the code: it shows `Hello`, then `1`, then `2`.
63
65
64
-
Now, let's add an `alert` before the code and *not* finish it with a semicolon:
66
+
Now let's remove the semicolon after the `alert`:
65
67
66
68
```js run no-beautify
67
-
alert("There will be an error")
69
+
alert("Hello")
68
70
69
-
[1, 2].forEach(alert)
71
+
[1, 2].forEach(alert);
70
72
```
71
73
72
-
Now if we run the code, only the first `alert` is shown and then we have an error!
73
-
74
-
But everything is fine again if we add a semicolon after `alert`:
75
-
```js run
76
-
alert("All fine now");
74
+
The difference compared to the code above is only one character: the semicolon at the end of the first line is gone.
77
75
78
-
[1, 2].forEach(alert)
79
-
```
76
+
If we run this code, only the first `Hello` shows (and there's an error, you may need to open the console to see it). There are no numbers any more.
80
77
81
-
Now we have the "All fine now" message followed by `1` and `2`.
78
+
That's because JavaScript does not assume a semicolon before square brackets `[...]`. So, the code in the last example is treated as a single statement.
82
79
83
-
84
-
The error in the no-semicolon variant occurs because JavaScript does not assume a semicolon before square brackets `[...]`.
85
-
86
-
So, because the semicolon is not auto-inserted, the code in the first example is treated as a single statement. Here's how the engine sees it:
80
+
Here's how the engine sees it:
87
81
88
82
```js run no-beautify
89
-
alert("There will be an error")[1, 2].forEach(alert)
83
+
alert("Hello")[1, 2].forEach(alert);
90
84
```
91
85
92
-
But it should be two separate statements, not one. Such a merging in this case is just wrong, hence the error. This can happen in other situations.
86
+
Looks weird, right? Such merging in this case is just wrong. We need to put a semicolon after `alert` for the code to work correctly.
87
+
88
+
This can happen in other situations also.
93
89
````
94
90
95
91
We recommend putting semicolons between statements even if they are separated by newlines. This rule is widely adopted by the community. Let's note once again -- *it is possible* to leave out semicolons most of the time. But it's safer -- especially for a beginner -- to use them.
Copy file name to clipboardExpand all lines: 1-js/02-first-steps/05-types/article.md
+1-1
Original file line number
Diff line number
Diff line change
@@ -64,7 +64,7 @@ Special numeric values formally belong to the "number" type. Of course they are
64
64
65
65
We'll see more about working with numbers in the chapter <info:number>.
66
66
67
-
## BigInt
67
+
## BigInt[#bigint-type]
68
68
69
69
In JavaScript, the "number" type cannot represent integer values larger than <code>(2<sup>53</sup>-1)</code> (that's `9007199254740991`), or less than <code>-(2<sup>53</sup>-1)</code> for negatives. It's a technical limitation caused by their internal representation.
Copy file name to clipboardExpand all lines: 1-js/02-first-steps/11-logical-operators/article.md
+2-2
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
# Logical operators
2
2
3
-
There are three logical operators in JavaScript: `||` (OR), `&&` (AND), `!` (NOT).
3
+
There are four logical operators in JavaScript: `||` (OR), `&&` (AND), `!` (NOT), `??` (Nullish Coalescing). Here we cover the first three, the `??` operator is in the next article.
4
4
5
5
Although they are called "logical", they can be applied to values of any type, not only boolean. Their result can also be of any type.
Copy file name to clipboardExpand all lines: 1-js/02-first-steps/12-nullish-coalescing-operator/article.md
+18-15
Original file line number
Diff line number
Diff line change
@@ -2,15 +2,14 @@
2
2
3
3
[recent browser="new"]
4
4
5
-
Here, in this article, we'll say that an expression is "defined" when it's neither `null` nor `undefined`.
6
-
7
5
The nullish coalescing operator is written as two question marks `??`.
8
6
7
+
As it treats `null` and `undefined` similarly, we'll use a special term here, in this article. We'll say that an expression is "defined" when it's neither `null` nor `undefined`.
8
+
9
9
The result of `a ?? b` is:
10
10
- if `a` is defined, then `a`,
11
11
- if `a` isn't defined, then `b`.
12
12
13
-
14
13
In other words, `??` returns the first argument if it's not `null/undefined`. Otherwise, the second one.
15
14
16
15
The nullish coalescing operator isn't anything completely new. It's just a nice syntax to get the first "defined" value of the two.
@@ -21,29 +20,31 @@ We can rewrite `result = a ?? b` using the operators that we already know, like
21
20
result = (a !==null&& a !==undefined) ? a : b;
22
21
```
23
22
23
+
Now it should be absolutely clear what `??` does. Let's see where it helps.
24
+
24
25
The common use case for `??` is to provide a default value for a potentially undefined variable.
25
26
26
-
For example, here we show `Anonymous` if `user` isn't defined:
27
+
For example, here we show `user` if defined, otherwise `Anonymous`:
27
28
28
29
```js run
29
30
let user;
30
31
31
-
alert(user ??"Anonymous"); // Anonymous
32
+
alert(user ??"Anonymous"); // Anonymous (user not defined)
32
33
```
33
34
34
-
Of course, if `user`had any value except `null/undefined`, then we would see it instead:
35
+
Here's the example with `user`assigned to a name:
35
36
36
37
```js run
37
38
let user ="John";
38
39
39
-
alert(user ??"Anonymous"); // John
40
+
alert(user ??"Anonymous"); // John (user defined)
40
41
```
41
42
42
43
We can also use a sequence of `??` to select the first value from a list that isn't `null/undefined`.
43
44
44
-
Let's say we have a user's data in variables `firstName`, `lastName` or `nickName`. All of them may be undefined, if the user decided not to enter a value.
45
+
Let's say we have a user's data in variables `firstName`, `lastName` or `nickName`. All of them may be not defined, if the user decided not to enter a value.
45
46
46
-
We'd like to display the user name using one of these variables, or show "Anonymous" if all of them are undefined.
47
+
We'd like to display the user name using one of these variables, or show "Anonymous" if all of them aren't defined.
The OR `||` operator exists since the beginning of JavaScript, so developers were using it for such purposes for a long time.
79
+
Historically, the OR `||` operator was there first. It exists since the beginning of JavaScript, so developers were using it for such purposes for a long time.
79
80
80
81
On the other hand, the nullish coalescing operator `??` was added to JavaScript only recently, and the reason for that was that people weren't quite happy with `||`.
81
82
@@ -96,16 +97,18 @@ alert(height || 100); // 100
96
97
alert(height ??100); // 0
97
98
```
98
99
99
-
- The `height ||100` checks `height` for being a falsy value, and it really is.
100
-
- so the result is the second argument, `100`.
100
+
- The `height ||100` checks `height` for being a falsy value, and it's `0`, falsy indeed.
101
+
- so the result of `||`is the second argument, `100`.
101
102
- The `height ??100` checks `height` for being `null/undefined`, and it's not,
102
103
- so the result is `height` "as is", that is `0`.
103
104
104
-
If the zero height is a valid value, that shouldn't be replaced with the default, then`??` does just the right thing.
105
+
In practice, the zero height is often a valid value, that shouldn't be replaced with the default. So`??` does just the right thing.
105
106
106
107
## Precedence
107
108
108
-
The precedence of the `??` operator is rather low: `5` in the [MDN table](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table). So `??` is evaluated before `=` and `?`, but after most other operations, such as `+`, `*`.
109
+
The precedence of the `??` operator is about the same as `||`, just a bit lower. It equals `5` in the [MDN table](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table), while `||` is `6`.
110
+
111
+
That means that, just like `||`, the nullish coalescing operator `??` is evaluated before `=` and `?`, but after most other operations, such as `+`, `*`.
109
112
110
113
So if we'd like to choose a value with `??` in an expression with other operators, consider adding parentheses:
111
114
@@ -139,7 +142,7 @@ The code below triggers a syntax error:
139
142
let x =1&&2??3; // Syntax error
140
143
```
141
144
142
-
The limitation is surely debatable, but it was added to the language specification with the purpose to avoid programming mistakes, when people start to switch to `??` from `||`.
145
+
The limitation is surely debatable, it was added to the language specification with the purpose to avoid programming mistakes, when people start to switch from `||` to `??`.
0 commit comments