All language subtitles for 16. Truthy and Falsy Values

af Afrikaans
sq Albanian
am Amharic
ar Arabic
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 Download
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 1 00:00:01,300 --> 00:00:03,620 So, we talked about type conversion 2 2 00:00:03,620 --> 00:00:07,240 and coercion to numbers and two strengths, 3 3 00:00:07,240 --> 00:00:10,150 but I didn't mention booleans yet, right? 4 4 00:00:10,150 --> 00:00:12,360 That's because we need to learn the concept 5 5 00:00:12,360 --> 00:00:15,490 of truthy and falsy values first. 6 6 00:00:15,490 --> 00:00:17,703 And so, that's what we're gonna do now. 7 7 00:00:19,090 --> 00:00:21,240 So, let's get right into it. 8 8 00:00:21,240 --> 00:00:26,130 So, falsy values are values that are not exactly false, 9 9 00:00:26,130 --> 00:00:29,360 but will become false when we try to convert them 10 10 00:00:29,360 --> 00:00:31,150 into a boolean. 11 11 00:00:31,150 --> 00:00:34,970 And in JavaScript, there are only five falsy values. 12 12 00:00:34,970 --> 00:00:38,210 And let me actually write them down here for you. 13 13 00:00:38,210 --> 00:00:43,210 So, five falsy values and they are zero, the empty string, 14 14 00:00:47,050 --> 00:00:52,050 undefined, null, and not a number, and that's it. 15 15 00:00:53,020 --> 00:00:56,120 Of course, false itself is already false, 16 16 00:00:56,120 --> 00:01:00,070 so we don't need to include it in the list of falsy values. 17 17 00:01:00,070 --> 00:01:03,530 So again, all of these five values will be converted 18 18 00:01:03,530 --> 00:01:07,890 to false when we attempt to convert them to a boolean. 19 19 00:01:07,890 --> 00:01:09,940 They're not exactly false initially, 20 20 00:01:09,940 --> 00:01:14,000 but they will become when converted to a boolean. 21 21 00:01:14,000 --> 00:01:17,130 So, that's the definition of falsy values. 22 22 00:01:17,130 --> 00:01:20,500 Everything else are our so-called truthy values. 23 23 00:01:20,500 --> 00:01:23,860 So, values that will be converted to true, for example, 24 24 00:01:23,860 --> 00:01:27,025 any number that is not zero or any string that is not 25 25 00:01:27,025 --> 00:01:30,060 an empty string will be converted to true 26 26 00:01:30,060 --> 00:01:32,820 when we attempt to convert them to a boolean. 27 27 00:01:32,820 --> 00:01:36,023 And so, let's actually see that in practice. 28 28 00:01:37,270 --> 00:01:39,420 So, just like with numbers and strings, 29 29 00:01:39,420 --> 00:01:44,420 we can use the boolean function, boolean and then zero. 30 30 00:01:45,240 --> 00:01:50,240 And we know that this one is a falsy value, right? 31 31 00:01:50,530 --> 00:01:53,020 So, let's copy this and do this a couple of times 32 32 00:01:53,020 --> 00:01:54,533 for some different things. 33 33 00:01:55,470 --> 00:01:57,913 Let's do the same with undefined. 34 34 00:02:00,580 --> 00:02:05,580 Let's do it now with a string and it's not an empty string. 35 35 00:02:07,060 --> 00:02:10,750 And now, let's also do this with this empty object 36 36 00:02:10,750 --> 00:02:13,820 and we will learn about objects in the next section. 37 37 00:02:13,820 --> 00:02:16,660 So, this here is simply an empty object. 38 38 00:02:16,660 --> 00:02:19,453 So, let's see what the result of this is gonna be. 39 39 00:02:22,290 --> 00:02:25,460 And we see that indeed, converting to zero here 40 40 00:02:25,460 --> 00:02:29,000 to a boolean resulted in false, 41 41 00:02:29,000 --> 00:02:31,800 and the same for undefined, it's also false. 42 42 00:02:31,800 --> 00:02:35,770 But then the string, Jonas is true, 43 43 00:02:35,770 --> 00:02:38,730 and so that's why we say that any string that is not 44 44 00:02:38,730 --> 00:02:41,600 an empty string is a truthy value. 45 45 00:02:41,600 --> 00:02:45,000 And the same actually applies to this empty object here, 46 46 00:02:45,000 --> 00:02:47,420 it's also a truthy value. 47 47 00:02:47,420 --> 00:02:50,093 But if we tried to convert an empty string, 48 48 00:02:50,980 --> 00:02:53,630 well, I think then you can already know 49 49 00:02:53,630 --> 00:02:57,890 what the result will be, and it's gonna be false. 50 50 00:02:57,890 --> 00:03:00,810 Again because it's a falsy value, 51 51 00:03:00,810 --> 00:03:03,470 as we see up here in this list. 52 52 00:03:03,470 --> 00:03:06,270 So, that's what truthy and falsy values are. 53 53 00:03:06,270 --> 00:03:09,880 And this is how we could convert them to booleans. 54 54 00:03:09,880 --> 00:03:13,110 But in practice, I actually never did this in my life. 55 55 00:03:13,110 --> 00:03:16,200 I never used this function here in practice. 56 56 00:03:16,200 --> 00:03:18,690 This was just to show you the concept of truthy 57 57 00:03:18,690 --> 00:03:20,520 and falsely values. 58 58 00:03:20,520 --> 00:03:22,310 So in practice, the conversion 59 59 00:03:22,310 --> 00:03:26,320 to boolean is always implicit, not explicit, 60 60 00:03:26,320 --> 00:03:29,380 or in other words is always typed coercion 61 61 00:03:29,380 --> 00:03:32,640 that JavaScript does automatically behind the scenes. 62 62 00:03:32,640 --> 00:03:36,400 But when exactly does JavaScript do type coercion 63 63 00:03:36,400 --> 00:03:37,700 to booleans? 64 64 00:03:37,700 --> 00:03:40,410 Well, it happens in two scenarios. 65 65 00:03:40,410 --> 00:03:44,420 First, when using logical operators, and second in 66 66 00:03:44,420 --> 00:03:46,830 a logical context, like for example, 67 67 00:03:46,830 --> 00:03:50,070 in the condition of an if else statement. 68 68 00:03:50,070 --> 00:03:52,410 And we're gonna talk about logical operators in 69 69 00:03:52,410 --> 00:03:54,920 a future lecture, so let's now go back 70 70 00:03:54,920 --> 00:03:58,760 to the if else statement and see how type coercion works 71 71 00:03:58,760 --> 00:04:00,890 in the if else condition. 72 72 00:04:00,890 --> 00:04:04,540 So, let's say that we have a money variable 73 73 00:04:06,810 --> 00:04:09,460 and in the beginning we don't have any money. 74 74 00:04:09,460 --> 00:04:12,150 So, we set it to zero here. 75 75 00:04:12,150 --> 00:04:14,890 And now we can use what we just learned to test 76 76 00:04:14,890 --> 00:04:18,830 if the person has currently any money or not, right? 77 77 00:04:18,830 --> 00:04:20,540 So, let me actually write it first, 78 78 00:04:20,540 --> 00:04:23,550 and then I'm gonna explain to you how it works. 79 79 00:04:23,550 --> 00:04:28,063 So, if money then let's log to the console, 80 80 00:04:31,890 --> 00:04:34,463 something like don't spend it all 81 81 00:04:38,870 --> 00:04:41,590 and notice how I used the double quotes, 82 82 00:04:41,590 --> 00:04:44,313 because in here I have a single quote for the don't. 83 83 00:04:45,550 --> 00:04:47,450 And then we can also do an else block, 84 84 00:04:49,820 --> 00:04:53,540 so for the case that the person does not have any money, 85 85 00:04:53,540 --> 00:04:58,540 then I can just say, you should get a job. 86 86 00:05:01,150 --> 00:05:02,590 Okay. 87 87 00:05:02,590 --> 00:05:05,630 So, let's see if this works, and then I'm gonna explain 88 88 00:05:05,630 --> 00:05:07,640 to you why it works. 89 89 00:05:07,640 --> 00:05:11,050 So, indeed we got the you should get a job, 90 90 00:05:11,050 --> 00:05:14,240 and so that's the else part here, right? 91 91 00:05:14,240 --> 00:05:18,350 So, this here is the code that got executed, but why? 92 92 00:05:18,350 --> 00:05:21,930 Well, we know that money is a number right now. 93 93 00:05:21,930 --> 00:05:25,410 And this number is zero, but in the logical context 94 94 00:05:25,410 --> 00:05:27,890 of an if else statement condition, 95 95 00:05:27,890 --> 00:05:30,300 so that's right here in these parenthesis, 96 96 00:05:30,300 --> 00:05:34,580 here JavaScript will try to coerce any value into a boolean. 97 97 00:05:34,580 --> 00:05:37,720 So, no matter what we put here, if it's not a boolean, 98 98 00:05:37,720 --> 00:05:40,980 JavaScript will try to convert it to a boolean. 99 99 00:05:40,980 --> 00:05:44,122 And that happens using the truthy and falsy value rules 100 100 00:05:44,122 --> 00:05:47,060 that we just discussed in the beginning. 101 101 00:05:47,060 --> 00:05:50,150 So, we know that money here is zero, 102 102 00:05:50,150 --> 00:05:53,200 but zero is a falsy value, right? 103 103 00:05:53,200 --> 00:05:56,550 And so, in this logical environment here in this condition, 104 104 00:05:56,550 --> 00:05:59,280 this number zero will be converted to false. 105 105 00:05:59,280 --> 00:06:01,570 Just like it happened here 106 106 00:06:01,570 --> 00:06:05,650 when we convert it manually zero to a boolean, right? 107 107 00:06:05,650 --> 00:06:09,510 So here, this conversion to boolean returned false. 108 108 00:06:09,510 --> 00:06:12,700 And here the exact same thing happens, money is zero, 109 109 00:06:12,700 --> 00:06:15,070 and so zero is converted to false 110 110 00:06:15,070 --> 00:06:16,810 because it's a falsy value. 111 111 00:06:16,810 --> 00:06:20,290 And as a result, the else block here is executed, 112 112 00:06:20,290 --> 00:06:23,940 and so on the console we see you should get a job. 113 113 00:06:23,940 --> 00:06:26,100 Now, if we change this to something else 114 114 00:06:26,100 --> 00:06:29,610 and it doesn't matter what number, let's say 100, 115 115 00:06:29,610 --> 00:06:32,760 then 100 is a truthy value, 116 116 00:06:32,760 --> 00:06:36,000 and so this means that this condition will be true. 117 117 00:06:36,000 --> 00:06:40,163 And so the if block will be executed, wanna see? 118 118 00:06:41,380 --> 00:06:42,670 Yes, indeed. 119 119 00:06:42,670 --> 00:06:44,873 Now it says don't spend it all. 120 120 00:06:45,810 --> 00:06:47,973 Great, I hope that made sense. 121 121 00:06:48,910 --> 00:06:51,940 And we can test this in another situation 122 122 00:06:51,940 --> 00:06:55,000 to make really sure that you understand it. 123 123 00:06:55,000 --> 00:06:58,390 So, another use case for this truthy and falsy values is 124 124 00:06:58,390 --> 00:07:02,510 to check if a variable is actually defined or not. 125 125 00:07:02,510 --> 00:07:05,250 And this might seem like a weird use case, 126 126 00:07:05,250 --> 00:07:07,980 but you will see later in the course that it actually makes 127 127 00:07:07,980 --> 00:07:10,080 a lot of sense sometimes to test 128 128 00:07:10,080 --> 00:07:13,120 if something actually exists or not. 129 129 00:07:13,120 --> 00:07:17,200 So, let's define a variable here as height, 130 130 00:07:17,200 --> 00:07:20,070 and then we can simply do this. 131 131 00:07:20,070 --> 00:07:25,070 If height, then let's run this code, YAY! Height is defined. 132 132 00:07:35,350 --> 00:07:40,350 But if not, well, then just say height is undefined. 133 133 00:07:44,540 --> 00:07:46,800 Okay, so let's see the result. 134 134 00:07:46,800 --> 00:07:49,850 And again, I will explain you why it works this way, 135 135 00:07:49,850 --> 00:07:52,860 and maybe you can already guess why it works this way. 136 136 00:07:52,860 --> 00:07:55,800 So, can you try to explain it to yourself maybe? 137 137 00:07:55,800 --> 00:07:57,000 That would be a good idea 138 138 00:07:57,000 --> 00:07:59,830 to make sure you actually got the concept. 139 139 00:07:59,830 --> 00:08:03,940 But anyway, we know that height is undefined 140 140 00:08:03,940 --> 00:08:05,570 in this moment, right? 141 141 00:08:05,570 --> 00:08:08,530 Because we didn't assign it any value yet. 142 142 00:08:08,530 --> 00:08:10,780 And we know from our little list here, 143 143 00:08:10,780 --> 00:08:13,410 that undefined is a falsy value. 144 144 00:08:13,410 --> 00:08:18,100 And therefore, just like before in the money here, 145 145 00:08:18,100 --> 00:08:21,150 this height variable here in this logical context, 146 146 00:08:21,150 --> 00:08:23,960 will automatically be converted to a boolean. 147 147 00:08:23,960 --> 00:08:26,890 And since height is undefined and undefined is 148 148 00:08:26,890 --> 00:08:31,320 a falsy value, height right here will be false. 149 149 00:08:31,320 --> 00:08:34,163 Therefore, this block here will be executed. 150 150 00:08:35,430 --> 00:08:39,660 But now if we assign something to it, no matter what it is, 151 151 00:08:39,660 --> 00:08:43,510 then we will get the other result. 152 152 00:08:43,510 --> 00:08:48,390 So, now it's true, and so now this block here is executed. 153 153 00:08:48,390 --> 00:08:52,270 However, with this, we can actually run into a problem. 154 154 00:08:52,270 --> 00:08:56,240 So, let's say that the height is zero for reason, 155 155 00:08:56,240 --> 00:08:58,620 and that's a perfectly valid number, 156 156 00:08:58,620 --> 00:09:01,810 but watch what happens when we run this code. 157 157 00:09:01,810 --> 00:09:04,860 Now we get again, height is undefined. 158 158 00:09:04,860 --> 00:09:07,030 So, why is that? 159 159 00:09:07,030 --> 00:09:09,220 And to help you know the answer by now, 160 160 00:09:09,220 --> 00:09:13,180 well it's because zero is also a falsy value. 161 161 00:09:13,180 --> 00:09:16,660 And so this one will also trigger this else block. 162 162 00:09:16,660 --> 00:09:19,440 But in this case, that's actually not what we want. 163 163 00:09:19,440 --> 00:09:21,210 So, this is kind of a bug. 164 164 00:09:21,210 --> 00:09:23,490 It's an error in our application 165 165 00:09:23,490 --> 00:09:25,420 because here in this if else statement, 166 166 00:09:25,420 --> 00:09:27,900 we didn't account for this scenario. 167 167 00:09:27,900 --> 00:09:29,420 We only accounted for the scenario 168 168 00:09:29,420 --> 00:09:32,330 that the height is either defined or not, 169 169 00:09:32,330 --> 00:09:36,210 but we didn't think of the height being zero, right? 170 170 00:09:36,210 --> 00:09:38,780 And so right now we get hightest undefined, 171 171 00:09:38,780 --> 00:09:40,890 even though that's not true. 172 172 00:09:40,890 --> 00:09:43,500 So, this is just to illustrate an example 173 173 00:09:43,500 --> 00:09:46,300 that there can be problems using this approach. 174 174 00:09:46,300 --> 00:09:49,280 However, we can fix this using logical operators, 175 175 00:09:49,280 --> 00:09:51,350 which is gonna be very interesting, 176 176 00:09:51,350 --> 00:09:53,610 and we will talk about that a little bit later 177 177 00:09:53,610 --> 00:09:55,220 in the section. 178 178 00:09:55,220 --> 00:09:57,440 But first in the next lecture, we need to talk 179 179 00:09:57,440 --> 00:10:01,203 about equality operators, so stay tuned for that. 16148

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