All language subtitles for 015 Type Conversion and Coercion

af Afrikaans
sq Albanian
am Amharic
ar Arabic Download
hy Armenian
az Azerbaijani
eu Basque
be Belarusian
bn Bengali
bs Bosnian
bg Bulgarian
ca Catalan
ceb Cebuano
ny Chichewa
zh-CN Chinese (Simplified)
zh-TW Chinese (Traditional)
co Corsican
hr Croatian
cs Czech
da Danish
nl Dutch
en English
eo Esperanto
et Estonian
tl Filipino
fi Finnish
fr French
fy Frisian
gl Galician
ka Georgian
de German
el Greek
gu Gujarati
ht Haitian Creole
ha Hausa
haw Hawaiian
iw Hebrew
hi Hindi
hmn Hmong
hu Hungarian
is Icelandic
ig Igbo
id Indonesian
ga Irish
it Italian
ja Japanese
jw Javanese
kn Kannada
kk Kazakh
km Khmer
ko Korean
ku Kurdish (Kurmanji)
ky Kyrgyz
lo Lao
la Latin
lv Latvian
lt Lithuanian
lb Luxembourgish
mk Macedonian
mg Malagasy
ms Malay
ml Malayalam
mt Maltese
mi Maori
mr Marathi
mn Mongolian
my Myanmar (Burmese)
ne Nepali
no Norwegian
ps Pashto
fa Persian
pl Polish
pt Portuguese
pa Punjabi
ro Romanian
ru Russian
sm Samoan
gd Scots Gaelic
sr Serbian
st Sesotho
sn Shona
sd Sindhi
si Sinhala
sk Slovak
sl Slovenian
so Somali
es Spanish
su Sundanese
sw Swahili
sv Swedish
tg Tajik
ta Tamil
te Telugu
th Thai
tr Turkish
uk Ukrainian
ur Urdu
uz Uzbek
vi Vietnamese
cy Welsh
xh Xhosa
yi Yiddish
yo Yoruba
zu Zulu
or Odia (Oriya)
rw Kinyarwanda
tk Turkmen
tt Tatar
ug Uyghur
Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated: 1 00:00:01,755 --> 00:00:02,588 In this video, 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. 26027

Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.