WEBVTT

1
00:00:01.755 --> 00:00:02.588
<v Jonas>In this video,</v>

2
00:00:02.588 --> 00:00:05.260
we need to go back to value types.

3
00:00:05.260 --> 00:00:08.180
So types are one of the fundamental aspects

4
00:00:08.180 --> 00:00:11.720
in programming, and converting between types

5
00:00:11.720 --> 00:00:15.010
is something that we do in every programming language.

6
00:00:15.010 --> 00:00:17.820
For example, converting a string to a number

7
00:00:17.820 --> 00:00:19.680
or a number into a Boolean

8
00:00:19.680 --> 00:00:22.110
is something that we do all the time.

9
00:00:22.110 --> 00:00:24.610
And so it's important that we learn about this

10
00:00:24.610 --> 00:00:28.170
before being able to move on further in the course.

11
00:00:28.170 --> 00:00:31.920
That's especially true for a language like JavaScript,

12
00:00:31.920 --> 00:00:34.790
which sometimes behaves in a weird way,

13
00:00:34.790 --> 00:00:36.713
as we will see in this video.

14
00:00:38.200 --> 00:00:41.040
Now, in JavaScript, there is type conversion

15
00:00:41.040 --> 00:00:42.870
and type coercion.

16
00:00:42.870 --> 00:00:46.050
So they sound very similar but are different.

17
00:00:46.050 --> 00:00:49.370
So type conversion is when we manually convert

18
00:00:49.370 --> 00:00:51.640
from one type to another.

19
00:00:51.640 --> 00:00:53.340
One the other hand, type coercion

20
00:00:53.340 --> 00:00:56.540
is when JavaScript automatically converts types

21
00:00:56.540 --> 00:00:58.610
behind the scenes for us.

22
00:00:58.610 --> 00:01:01.070
So that's necessary in some situation

23
00:01:01.070 --> 00:01:04.710
but it happens implicitly, completely hidden from us.

24
00:01:04.710 --> 00:01:05.880
Okay?

25
00:01:05.880 --> 00:01:08.060
So let's start with type conversion,

26
00:01:08.060 --> 00:01:11.040
which remember, is when we explicitly want

27
00:01:11.040 --> 00:01:13.800
to convert from one type to another.

28
00:01:13.800 --> 00:01:16.120
So let's say that we have an input field

29
00:01:16.120 --> 00:01:20.240
on a web page for the user to input their birth year.

30
00:01:20.240 --> 00:01:24.593
And these inputs from input fields usually come as strings.

31
00:01:26.300 --> 00:01:30.460
So let's say that the inputYear that we get

32
00:01:30.460 --> 00:01:32.700
from the user interface

33
00:01:32.700 --> 00:01:36.240
is a string with the value 1991.

34
00:01:36.240 --> 00:01:39.490
But now if we want to do some calculations with this,

35
00:01:39.490 --> 00:01:41.480
this won't really work.

36
00:01:41.480 --> 00:01:42.830
So let me show that to you.

37
00:01:43.780 --> 00:01:45.113
So console.log.

38
00:01:46.120 --> 00:01:47.860
Let's say inputYear,

39
00:01:47.860 --> 00:01:50.700
and now plus 18.

40
00:01:50.700 --> 00:01:52.460
And so like this we can calculate

41
00:01:52.460 --> 00:01:56.250
in what year the person will become of full age.

42
00:01:56.250 --> 00:01:59.200
Now, remember that when we have a string

43
00:01:59.200 --> 00:02:01.370
and add something to the string,

44
00:02:01.370 --> 00:02:04.430
it will basically concatenate the strings.

45
00:02:04.430 --> 00:02:08.650
So we can't expect that this actually adds 18

46
00:02:08.650 --> 00:02:11.253
to this number here because it's a string.

47
00:02:12.260 --> 00:02:15.030
So let me show you what I mean with that.

48
00:02:15.030 --> 00:02:17.810
And so indeed, we know get the string,

49
00:02:17.810 --> 00:02:20.960
which basically contains the 1991 string

50
00:02:20.960 --> 00:02:22.933
and then the 18 as well.

51
00:02:24.536 --> 00:02:27.410
So we need a way of fixing this,

52
00:02:27.410 --> 00:02:28.990
which means that we need a way

53
00:02:28.990 --> 00:02:32.650
of converting this string to a number.

54
00:02:32.650 --> 00:02:35.363
So let me actually log that here first.

55
00:02:36.400 --> 00:02:38.260
So console.log.

56
00:02:38.260 --> 00:02:41.580
And then the way we convert this string to a number

57
00:02:41.580 --> 00:02:45.570
is by using the built-in Number function.

58
00:02:45.570 --> 00:02:47.270
So we write number,

59
00:02:47.270 --> 00:02:51.060
then parenthesis, and then inputYear.

60
00:02:51.060 --> 00:02:53.690
And we will learn exactly what a function is

61
00:02:53.690 --> 00:02:57.640
and why it works this way in the next section.

62
00:02:57.640 --> 00:03:01.230
For now, just know that we can basically convert strings

63
00:03:01.230 --> 00:03:04.730
to numbers by using this function,

64
00:03:04.730 --> 00:03:08.770
which we execute using these parenthesis here.

65
00:03:08.770 --> 00:03:11.970
So we have this parenthesis inside this parenthesis now

66
00:03:11.970 --> 00:03:13.883
but don't get confused by that.

67
00:03:14.890 --> 00:03:17.505
So doing this operation here

68
00:03:17.505 --> 00:03:20.773
will then return the string as a number.

69
00:03:21.630 --> 00:03:22.980
So let me show that to you.

70
00:03:24.200 --> 00:03:26.990
And so indeed, now we get 1991 here

71
00:03:26.990 --> 00:03:29.930
in this pink color basically.

72
00:03:29.930 --> 00:03:32.850
And the colors might change throughout the time.

73
00:03:32.850 --> 00:03:34.890
By the time I record this video,

74
00:03:34.890 --> 00:03:39.320
numbers are pink and strings are just this white.

75
00:03:39.320 --> 00:03:40.920
Let me actually print them both.

76
00:03:43.700 --> 00:03:46.810
And so that should make it really visible

77
00:03:46.810 --> 00:03:49.310
that yeah, the first one is a number,

78
00:03:49.310 --> 00:03:51.500
the second one is a string.

79
00:03:51.500 --> 00:03:54.730
Okay, but now one thing that's really important

80
00:03:54.730 --> 00:03:57.460
to note here is that the original value

81
00:03:57.460 --> 00:03:59.570
is actually not converted.

82
00:03:59.570 --> 00:04:02.720
So the inputYear variable itself,

83
00:04:02.720 --> 00:04:06.080
so this one, is still a string, right?

84
00:04:06.080 --> 00:04:08.870
It still holds the variable 1991

85
00:04:08.870 --> 00:04:11.440
as a string and not as a number.

86
00:04:11.440 --> 00:04:14.040
That's why down here in this log,

87
00:04:14.040 --> 00:04:15.980
where we do this calculation,

88
00:04:15.980 --> 00:04:18.220
the result is still this string

89
00:04:18.220 --> 00:04:21.420
because again, the original inputYear variable

90
00:04:21.420 --> 00:04:22.930
is still a string.

91
00:04:22.930 --> 00:04:24.350
Using this number function

92
00:04:24.350 --> 00:04:27.563
will simply give to us a converted version.

93
00:04:28.580 --> 00:04:31.296
So if you want to perform this calculation,

94
00:04:31.296 --> 00:04:35.410
we need to use Number here as well.

95
00:04:35.410 --> 00:04:37.920
And so this will now convert the number

96
00:04:37.920 --> 00:04:41.460
and then to that number, the 18 will be added.

97
00:04:41.460 --> 00:04:46.460
And so now we should end up with something like 2009 I guess

98
00:04:47.500 --> 00:04:49.970
and indeed, that's right.

99
00:04:49.970 --> 00:04:52.700
But now what if we're trying to convert something

100
00:04:52.700 --> 00:04:55.676
to a number that is impossible to convert?

101
00:04:55.676 --> 00:04:59.750
Let's try that with a string

102
00:04:59.750 --> 00:05:01.980
that doesn't really contain a number.

103
00:05:01.980 --> 00:05:05.410
So let's try to console.log converting

104
00:05:05.410 --> 00:05:09.110
to a number the string Jonas.

105
00:05:09.110 --> 00:05:11.360
So JavaScript will look at the string,

106
00:05:11.360 --> 00:05:13.810
will try to convert it to a number

107
00:05:13.810 --> 00:05:15.470
but it won't really work.

108
00:05:15.470 --> 00:05:17.153
So what do we get instead?

109
00:05:18.000 --> 00:05:21.870
We get this NaN, which stands for not a number.

110
00:05:21.870 --> 00:05:25.040
So JavaScript gives us this not a number value

111
00:05:25.040 --> 00:05:28.330
whenever an operation that involves numbers fails

112
00:05:28.330 --> 00:05:30.670
to produce a new number.

113
00:05:30.670 --> 00:05:35.210
So basically, not a number actually means invalid number.

114
00:05:35.210 --> 00:05:37.100
It's not really not a number.

115
00:05:37.100 --> 00:05:39.143
And let me actually prove that to you.

116
00:05:41.130 --> 00:05:43.217
So we can check the typeof NaN.

117
00:05:46.085 --> 00:05:47.418
So not a number.

118
00:05:48.360 --> 00:05:49.393
And as you will see,

119
00:05:50.420 --> 00:05:53.960
the weird result of this is that the type

120
00:05:53.960 --> 00:05:56.220
of not a number is actually number

121
00:05:56.220 --> 00:06:01.220
and so again, not a number actually means an invalid number.

122
00:06:01.520 --> 00:06:03.060
It's still a number somehow

123
00:06:03.060 --> 00:06:04.623
but it's an invalid one.

124
00:06:06.211 --> 00:06:07.700
And so again, we get not a number

125
00:06:07.700 --> 00:06:11.170
whenever an operation involving numbers fails

126
00:06:11.170 --> 00:06:13.810
to give us a new number.

127
00:06:13.810 --> 00:06:17.200
Okay, so that is converting strings to numbers

128
00:06:17.200 --> 00:06:19.733
but, of course, we can also do the opposite.

129
00:06:22.130 --> 00:06:25.280
It's a little bit less important I would say

130
00:06:25.280 --> 00:06:27.283
but I still want to show it to you.

131
00:06:28.970 --> 00:06:30.910
So to do it the other way around,

132
00:06:30.910 --> 00:06:33.430
we use this String function.

133
00:06:33.430 --> 00:06:36.790
And that's quite straightforward, right?

134
00:06:36.790 --> 00:06:39.560
Just keep in mind that we need to really start it

135
00:06:39.560 --> 00:06:43.330
with a capital S, just like here the Number function needs

136
00:06:43.330 --> 00:06:45.540
to start with a capital N.

137
00:06:45.540 --> 00:06:47.103
Otherwise it's not gonna work.

138
00:06:48.760 --> 00:06:50.950
So we get 23.

139
00:06:50.950 --> 00:06:54.130
And remember that whenever the value here is white,

140
00:06:54.130 --> 00:06:56.330
then it means it is a string.

141
00:06:56.330 --> 00:06:58.095
So it looks kind of the same.

142
00:06:58.095 --> 00:07:03.095
Let's again log both just to make this point.

143
00:07:04.120 --> 00:07:05.920
So the pink one is the value

144
00:07:05.920 --> 00:07:08.240
that actually has the number type

145
00:07:08.240 --> 00:07:10.353
and this one has the string type.

146
00:07:11.550 --> 00:07:14.540
Okay, so again, this one is not as important

147
00:07:14.540 --> 00:07:16.740
but I still wanted to mention it.

148
00:07:16.740 --> 00:07:20.570
Now, JavaScript can only convert to three types.

149
00:07:20.570 --> 00:07:24.000
So we can convert to a number, to a string

150
00:07:24.000 --> 00:07:25.950
or to a Boolean.

151
00:07:25.950 --> 00:07:28.660
But we cannot, for example, convert something

152
00:07:28.660 --> 00:07:31.200
to undefined or to null.

153
00:07:31.200 --> 00:07:33.410
That doesn't make a lot of sense.

154
00:07:33.410 --> 00:07:35.730
Now, here we only converted to numbers

155
00:07:35.730 --> 00:07:38.550
and to strings but not to Booleans.

156
00:07:38.550 --> 00:07:41.920
And that's because Booleans behave in a special way.

157
00:07:41.920 --> 00:07:44.870
And for that reason, there is a separate lecture coming up

158
00:07:44.870 --> 00:07:47.973
on so-called truthy and falsy values.

159
00:07:48.920 --> 00:07:51.160
Great, so that is type conversion

160
00:07:51.160 --> 00:07:52.900
where we do manually convert

161
00:07:52.900 --> 00:07:55.040
from one type to another.

162
00:07:55.040 --> 00:07:56.430
However, in practice,

163
00:07:56.430 --> 00:07:58.770
we rarely have to do it manually

164
00:07:58.770 --> 00:08:02.240
because JavaScript actually does type coercion automatically

165
00:08:02.240 --> 00:08:04.470
for us in many situations.

166
00:08:04.470 --> 00:08:06.440
So let's talk about that now.

167
00:08:06.440 --> 00:08:08.750
And let's just separate this here

168
00:08:08.750 --> 00:08:09.983
with some comments.

169
00:08:11.320 --> 00:08:12.913
So type conversion.

170
00:08:14.060 --> 00:08:14.893
And then

171
00:08:18.390 --> 00:08:20.310
type coercion.

172
00:08:20.310 --> 00:08:22.820
So basically, type coercion happens

173
00:08:22.820 --> 00:08:26.310
whenever an operator is dealing with two values

174
00:08:26.310 --> 00:08:27.990
that have different types.

175
00:08:27.990 --> 00:08:31.440
So in that case, JavaScript will then, behind the scenes,

176
00:08:31.440 --> 00:08:35.030
convert one of the values to match the other value

177
00:08:35.030 --> 00:08:35.950
so that in the end,

178
00:08:35.950 --> 00:08:38.220
the operation can be executed.

179
00:08:38.220 --> 00:08:40.750
And actually, we already saw that happening

180
00:08:40.750 --> 00:08:41.963
if you think about this.

181
00:08:42.950 --> 00:08:47.200
So let me show that to you,

182
00:08:47.200 --> 00:08:48.973
starting with strings.

183
00:08:49.910 --> 00:08:51.650
Remember how we did this.

184
00:08:51.650 --> 00:08:53.930
I am and then a number.

185
00:08:53.930 --> 00:08:55.323
Let's say 23.

186
00:08:56.950 --> 00:09:00.683
And then another plus years old.

187
00:09:01.570 --> 00:09:04.130
So we already know that this is gonna produce a string

188
00:09:04.130 --> 00:09:07.050
that says I am 23 years old.

189
00:09:07.050 --> 00:09:09.240
But how does that actually work?

190
00:09:09.240 --> 00:09:11.420
Because 23 is a number.

191
00:09:11.420 --> 00:09:13.940
So we have different types here, right?

192
00:09:13.940 --> 00:09:17.263
We have a string, a number and another string.

193
00:09:18.340 --> 00:09:23.110
So let's check and indeed, that is what happens.

194
00:09:23.110 --> 00:09:26.190
And it works this way because of type coercion.

195
00:09:26.190 --> 00:09:28.380
So in JavaScript, the plus operator

196
00:09:28.380 --> 00:09:32.470
that we used here triggers a coercion to strings.

197
00:09:32.470 --> 00:09:35.100
And so whenever there is an operation between a string

198
00:09:35.100 --> 00:09:39.540
and a number, the number will be converted to a string.

199
00:09:39.540 --> 00:09:41.160
So thanks to type coercion,

200
00:09:41.160 --> 00:09:43.470
writing this would be exactly the same

201
00:09:43.470 --> 00:09:45.803
as writing this.

202
00:09:50.510 --> 00:09:51.343
Right?

203
00:09:51.343 --> 00:09:53.040
Because again, the plus operator

204
00:09:53.040 --> 00:09:55.780
will convert numbers to strings.

205
00:09:55.780 --> 00:09:58.610
And the same actually happens in template literals.

206
00:09:58.610 --> 00:10:00.790
It also takes all the number values

207
00:10:00.790 --> 00:10:03.500
and also converts them to strings.

208
00:10:03.500 --> 00:10:06.900
Now, if JavaScript did not have automatic type coercion,

209
00:10:06.900 --> 00:10:08.879
like many other languages don't,

210
00:10:08.879 --> 00:10:11.730
then we would have to manually do this

211
00:10:11.730 --> 00:10:13.890
like we just learned before.

212
00:10:13.890 --> 00:10:17.870
Then we would have to do String 23

213
00:10:17.870 --> 00:10:21.220
and then this would be the only way that this would work.

214
00:10:21.220 --> 00:10:22.560
But luckily for us,

215
00:10:22.560 --> 00:10:24.380
JavaScript has type coercion

216
00:10:24.380 --> 00:10:27.080
and so this will happen completely automatically

217
00:10:27.080 --> 00:10:28.680
behind the scenes.

218
00:10:28.680 --> 00:10:31.320
Now, actually not all the operators

219
00:10:31.320 --> 00:10:33.830
do type coercion to string.

220
00:10:33.830 --> 00:10:35.573
So let me show you something else.

221
00:10:37.110 --> 00:10:42.110
So if we do 23, the string minus 10 the string

222
00:10:44.010 --> 00:10:47.823
minus three, what do you think will happen now?

223
00:10:48.920 --> 00:10:50.830
So let's actually check

224
00:10:52.390 --> 00:10:53.863
and it gives us 10.

225
00:10:54.780 --> 00:10:56.210
So what happened here?

226
00:10:56.210 --> 00:10:58.407
It looks like this time JavaScript converted

227
00:10:58.407 --> 00:11:01.240
the strings to numbers.

228
00:11:01.240 --> 00:11:03.750
And indeed, that's why we get 10

229
00:11:03.750 --> 00:11:06.750
because 23 minus 10 is 13

230
00:11:06.750 --> 00:11:08.760
minus 3 is 10.

231
00:11:08.760 --> 00:11:11.640
And so what this means is that the minus operator

232
00:11:11.640 --> 00:11:14.280
actually triggers the opposite conversion.

233
00:11:14.280 --> 00:11:17.630
So in this case, strings are converted to numbers

234
00:11:17.630 --> 00:11:19.710
and not the other way around.

235
00:11:19.710 --> 00:11:23.120
So instead if we use the plus,

236
00:11:23.120 --> 00:11:24.820
what do you think is gonna happen?

237
00:11:26.500 --> 00:11:29.040
Then the three is converted to a string

238
00:11:29.040 --> 00:11:31.413
and then the three strings are concatenated.

239
00:11:32.570 --> 00:11:33.403
Okay?

240
00:11:33.403 --> 00:11:35.380
So this is a very important distinction

241
00:11:35.380 --> 00:11:37.020
to keep in mind

242
00:11:37.020 --> 00:11:40.470
because this actually confuses many JavaScript beginners

243
00:11:40.470 --> 00:11:42.070
when they don't know about this.

244
00:11:43.930 --> 00:11:45.880
So let's try another one here

245
00:11:45.880 --> 00:11:49.190
and I'm again using 23 the string

246
00:11:49.190 --> 00:11:51.800
times two, the string.

247
00:11:51.800 --> 00:11:53.630
And again, you will see that these values

248
00:11:53.630 --> 00:11:57.303
are gonna be converted to numbers before.

249
00:11:58.190 --> 00:12:00.780
And indeed, that's why we get 46

250
00:12:00.780 --> 00:12:04.030
because both of them are now converted to numbers

251
00:12:04.030 --> 00:12:05.360
because that's the only way

252
00:12:05.360 --> 00:12:08.920
that the multiplier operator can work.

253
00:12:08.920 --> 00:12:11.763
And the same, of course, is true for dividing.

254
00:12:14.260 --> 00:12:18.820
Okay, so I hope that the distinction between type conversion

255
00:12:18.820 --> 00:12:22.270
and type coercion is now pretty clear.

256
00:12:22.270 --> 00:12:25.350
And now just to make sure that you actually got it,

257
00:12:25.350 --> 00:12:28.690
let's play a game called guess the output.

258
00:12:28.690 --> 00:12:30.883
So that's a game I just made up.

259
00:12:31.830 --> 00:12:34.420
So I want you to guess what happens here.

260
00:12:34.420 --> 00:12:39.420
So I'll write one plus one like this.

261
00:12:40.590 --> 00:12:45.590
And then we say n equals n minus one again.

262
00:12:52.800 --> 00:12:55.800
So what do you think n will look like

263
00:12:55.800 --> 00:12:57.960
when we log it to the console?

264
00:12:57.960 --> 00:13:00.710
So essentially, we start with one the string,

265
00:13:00.710 --> 00:13:03.403
then we add one and then we subtract one.

266
00:13:05.060 --> 00:13:06.950
So take a moment to think

267
00:13:06.950 --> 00:13:08.310
what this should look like

268
00:13:08.310 --> 00:13:11.380
and then let's take a look at the solution.

269
00:13:11.380 --> 00:13:13.773
And it is 10.

270
00:13:14.690 --> 00:13:16.940
So that's a bit counterintuitive

271
00:13:16.940 --> 00:13:18.430
but according to the rules

272
00:13:18.430 --> 00:13:19.840
that we just learned before,

273
00:13:19.840 --> 00:13:21.460
it actually makes sense.

274
00:13:21.460 --> 00:13:23.170
So here in the first line,

275
00:13:23.170 --> 00:13:26.140
one plus one will actually turn out

276
00:13:26.140 --> 00:13:27.930
to be 11, the string

277
00:13:27.930 --> 00:13:29.800
because we have one string here

278
00:13:29.800 --> 00:13:31.550
and then the plus operator

279
00:13:31.550 --> 00:13:33.160
will automatically convert the number

280
00:13:33.160 --> 00:13:34.120
to a string.

281
00:13:34.120 --> 00:13:38.850
And so the result of this one is the string 11.

282
00:13:38.850 --> 00:13:41.470
But then here we have the minus operator.

283
00:13:41.470 --> 00:13:43.110
And in the minus operator,

284
00:13:43.110 --> 00:13:45.970
whenever we have a string or more strings,

285
00:13:45.970 --> 00:13:48.220
it will then convert it to a number.

286
00:13:48.220 --> 00:13:51.140
And so here the string 11 will be converted

287
00:13:51.140 --> 00:13:54.880
to 11 the number and then 11 minus one

288
00:13:54.880 --> 00:13:56.143
is, of course, 10.

289
00:13:57.790 --> 00:14:00.010
Okay, let's do one or two more

290
00:14:00.010 --> 00:14:02.130
and let's do it in the console here.

291
00:14:02.130 --> 00:14:04.230
And we can actually clear the console

292
00:14:04.230 --> 00:14:06.650
of all this clutter here

293
00:14:06.650 --> 00:14:08.523
by clicking on clear console.

294
00:14:09.828 --> 00:14:14.828
So let's do two plus three plus four plus five, the string.

295
00:14:16.570 --> 00:14:18.570
And now you actually can't really guess

296
00:14:18.570 --> 00:14:21.404
because we can already see the solution there.

297
00:14:21.404 --> 00:14:24.640
So let's try to understand what happened here.

298
00:14:24.640 --> 00:14:27.950
So we start here with two plus three,

299
00:14:27.950 --> 00:14:29.380
which makes five.

300
00:14:29.380 --> 00:14:32.650
Then five plus four makes nine

301
00:14:32.650 --> 00:14:36.460
and then we end up with nine plus five, the string.

302
00:14:36.460 --> 00:14:38.270
And then as you already know,

303
00:14:38.270 --> 00:14:39.500
since we have a string,

304
00:14:39.500 --> 00:14:42.650
the plus operator will convert the other operand,

305
00:14:42.650 --> 00:14:44.800
which is nine also to a string

306
00:14:44.800 --> 00:14:47.973
and then we end up with 95 as a string.

307
00:14:48.910 --> 00:14:50.440
Okay, and another one.

308
00:14:50.440 --> 00:14:53.350
10 minus 4

309
00:14:54.950 --> 00:14:57.530
minus three,

310
00:14:57.530 --> 00:14:59.790
and keep in mind that these are strings,

311
00:14:59.790 --> 00:15:03.510
and then minus the real number two.

312
00:15:03.510 --> 00:15:05.343
But then plus five the string.

313
00:15:06.310 --> 00:15:08.330
So again, this looks very weird

314
00:15:08.330 --> 00:15:11.270
but the logic is kind of the same as before.

315
00:15:11.270 --> 00:15:15.040
So we have two values that are subtracted

316
00:15:15.040 --> 00:15:18.400
and so JavaScript will convert them both to numbers

317
00:15:18.400 --> 00:15:21.290
and so the result of this is six.

318
00:15:21.290 --> 00:15:25.140
Then six minus three is three.

319
00:15:25.140 --> 00:15:27.560
Then three minus two is one.

320
00:15:27.560 --> 00:15:30.640
And then we end up with the same situation as before.

321
00:15:30.640 --> 00:15:33.750
So this one will be converted to a string

322
00:15:33.750 --> 00:15:35.533
and then we end up with the string 15.

323
00:15:37.990 --> 00:15:39.000
Okay.

324
00:15:39.000 --> 00:15:42.680
And with that, I think this should be pretty clear now.

325
00:15:42.680 --> 00:15:45.160
And you might be wondering why we're talking so much

326
00:15:45.160 --> 00:15:47.400
about this but it's really important

327
00:15:47.400 --> 00:15:49.900
that you know about this right from the start

328
00:15:49.900 --> 00:15:51.640
so that you can write your code

329
00:15:51.640 --> 00:15:53.690
with all of this in mind.

330
00:15:53.690 --> 00:15:56.630
Now, many people actually don't like type coercion

331
00:15:56.630 --> 00:15:58.630
and think that it's a bad practice

332
00:15:58.630 --> 00:16:01.120
to rely on type coercion.

333
00:16:01.120 --> 00:16:02.180
One reason for that

334
00:16:02.180 --> 00:16:04.820
is that type coercion can, in fact,

335
00:16:04.820 --> 00:16:08.770
introduce many unexpected bugs into our program.

336
00:16:08.770 --> 00:16:12.100
However, this only happens when we don't really know

337
00:16:12.100 --> 00:16:13.260
what we're doing.

338
00:16:13.260 --> 00:16:15.130
So when we don't know about the stuff

339
00:16:15.130 --> 00:16:16.400
that I just showed you

340
00:16:16.400 --> 00:16:18.510
because if you know, then it's way easier

341
00:16:18.510 --> 00:16:20.590
to avoid these errors.

342
00:16:20.590 --> 00:16:24.800
So in my opinion, coercion is actually a great mechanism

343
00:16:24.800 --> 00:16:27.670
that is gonna allow us to write a lot less code

344
00:16:27.670 --> 00:16:30.900
and also to write more readable code.

345
00:16:30.900 --> 00:16:32.960
So really make sure to take some time

346
00:16:32.960 --> 00:16:35.480
to understand how type coercion works

347
00:16:35.480 --> 00:16:38.083
and then just embrace it in your code.

