Тёмный

Another 5 Must Know JavaScript Features That Almost Nobody Knows 

Web Dev Simplified
Подписаться 1,6 млн
Просмотров 214 тыс.
50% 1

Опубликовано:

 

26 сен 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 501   
@prometheas
@prometheas 2 года назад
Been working with JavaScript on and off since 1998, and I still find tons of values in your videos. Kudos, Kyle, on these excellent tutorials-you’re a real community asset
@richardwelsh7901
@richardwelsh7901 2 года назад
I feel like the ECMA spec has evolved so much since the initial releases that we should be calling it JS++
@iapplethis
@iapplethis 2 года назад
lol
@SilviuBurcea1
@SilviuBurcea1 3 года назад
So in case anyone wondered how decimal numbers can be represented in memory. If we push a 1 to the left, we double its value. If we push it to the right, it's going to be halved. So let's do it, starting with 1: decimal -> binary 1 -> 1 .1 -> 0.5 .01 -> 0.25 .001 -> 0.125 Need 0.75 in decimal? That's 0.5 + 0.25 so it would be .11. Now let's look at the famous 0.1 + 0.2 = 0.30000004. 0.1 (dec) is smaller than 0.125 (1/8) so we need the next 2^-x power, 1/16, that's 0.0625 (.0001 binary). We're left with 0.0375, which is a bit larger than 1/32 (0.03125 dec, .00001 binary). 1/16 + 1/32 is therefore 0.09375 in decimal (.00011 binary). We would need 0.00625 more to 0.1, we're getting closer to 0.1, but in this case, since 0.1 can't be a sum of 2^-x powers, you will reach the maximum number of bits threshold so your value gets truncated. Imagine if he had only 4 bits, the best binary representation for 0.1 would have been 0.0001, which is only 0.0625! 0.2 (dec) is larget than 0.125, so we have .001 for starters, we need 0.075 more, which is between 1/16 and 1/8, so we have 1/8 + 1/16 so far (0.125 + 0.0625 = 0.1875, .0011 in decimal). We would need 0.0125 next, which, again, is not a sum for 2^-x powers and 0.2 representation is again truncated. You get close, but never 0.2 exactly. This is why you're not getting 0.3 for adding 0.1 and 0.2, which also doesn't have an exact binary representation. 0.1 + 0.2 in binary is like adding 2 truncated numbers, the way you would do 975 + 210 in decimal, about 1000 + about 200, that should be about 1200.
@mhombach3035
@mhombach3035 2 года назад
I mean, for the "Binary Math" solution I would highly recommend using Math.round and just round the comparing values to 2 decimals or so. Or directly round the values after each math-operation to x decimals so you can then later compare them to 0.35 directly.
@huge_letters
@huge_letters Год назад
I would actually suggest using a library specifically made for dealing with decimals(like decimaljs or bigjs) - especially true if you're working with some financial data and rounding it would be rather risky.
@mhombach3035
@mhombach3035 Год назад
​@@huge_letters As always it "depends on the usecase". For financial data that could be worth a shot, but then again you are depending your financial data on some "dude" who has issues open since 2018 which haven't been closed. If you are too lazy to repeat "Math.round()" in your code, you should consider writing util functions yourself, so you drastically reduce the likelyhood of bugs. For example write a "sum([decimalsArray])" function that returns with a precision of 2 by default and can be adjusted by parameters. I also read somewhere that a new datatype is coming that will fix this, but i can't find any info on that so maybe I have faulty memory here...
@Bazkur98
@Bazkur98 3 года назад
I'm amazed that after so long of working in JS that I can still learn something new. This time around, the console Timer and debugger option :) Thanks for sharing!
@lukahadziegric5982
@lukahadziegric5982 3 года назад
I mean... labels are essentially GOTO statements. Sure, there are times when you want to use them, but they are usually a bad thing because it makes code less readable in more complex examples. For this first example, you can just use a "break" statement to break out of that inner loop.
@nickscott9832
@nickscott9832 2 года назад
Or just check the condition in the outer loop
@z-aru
@z-aru 2 года назад
True, we need a concise example of when to use the labels I think
@TheGreatMcN
@TheGreatMcN 2 года назад
If a labeled break is like a goto, then how is unlabeled break not like a goto?
@TheNewGreenIsBlue
@TheNewGreenIsBlue 2 года назад
@@TheGreatMcN GOTO statements are icky. I mean... it's what the compiler is ACTUALLY doing really low level... but yeah, I'd consider rearchitecting the code before using labelled gotos. Like, consider using functions and return statements.
@TheGreatMcN
@TheGreatMcN 2 года назад
@@TheNewGreenIsBlue Sure, I agree with that. That doesn't answer my question though.
@KurtSchwind
@KurtSchwind 3 года назад
Tip for those trying to compare equality on decimal arithmetic: Use subtraction and an epsilon. IE: let epsilon = 0.00001 (or whatever precision you like) and re-write your equality to if Math.abs(x-Comparison_Value) < epsilon { }. In your example it would be if (Math.abs(x-0.35) < epsilon) { // do stuff }
@adtc
@adtc 3 года назад
Couldn't you just floor it and check for zero? Just curious...
@KurtSchwind
@KurtSchwind 3 года назад
@@adtc Flooring will truncate the decimal part completely. So if you were to compare 0.9 with 0.3 with a floor it'd be equal. Unless I'm not understanding where you are using the floor function. Math.floor(0.9-0.2) === 0 -> true. But I think most would want that to be falsey
@adtc
@adtc 3 года назад
@@KurtSchwind oh right, I don't know what I was thinking 🤪 thanks
@arjix8738
@arjix8738 3 года назад
or just calculate using whole numbers (integers) and then convert them to decimals eg divide it by 10 => 3/10 == 0.3
@KurtSchwind
@KurtSchwind 3 года назад
@@arjix8738 Int math is prefered, but not always an option, it will depend on the size of the numbers you are using. If you want precision to 6 decimal places, you'll have to multiply by a million and then divide at the end, which may or may not be ok. But in general, I do agree that if you know that your numbers are safely not going to overflow, that converting to int and back is the best. For money transactions, I leave everything in pennies (or cents or whatever) and then convert on the presentation layer.
@revidee
@revidee 3 года назад
17:12 you can use Number.EPSILON in combination with Math.abs() to include these tolerances. Eg.: Math.abs(x - 0.35)
@CottidaeSEA
@CottidaeSEA 2 года назад
That's a really bad idea as you can't assert that Number.EPSILON has a good enough tolerance. Example: Math.abs((0.1 + 0.2) - 0.3) < Number.EPSILON is true. Math.abs((1000000.1 + 0.2) - 1000000.3) < Number.EPSILON is false. Clearly the difference should be the same, yet the tolerance is insufficient. Your best bet when working with things like these would be to use a custom tolerance. The approach is sound, but relying on Number.EPSILON is not. It would also be possible to use Math.abs, multiply by 10^n and then Math.round to get an integer value, after which you can make an assertion. I haven't tested it extensively though, so I can't guarantee it works in all cases, but it's a possibility for some cases I can think of.
@GetawayJamie
@GetawayJamie 3 года назад
This video is like window shopping, you find things you never thought you needed!
@magicfibre
@magicfibre 3 года назад
9:58 No, it's not hard at all. You can use Object.keys, Object.values and Object.entries to effortlessly loop through anything you want. Being able to use an object as a key is super cool though! Would be even cooler if object comparison wasn't such a pain in JS 😅
@huge_letters
@huge_letters Год назад
Objects should be used for storing data where your keys are pretty much static and known and well-structured - like you have a person entity which has a name, age, location etc. Map was made specifically for situations where you want a relationship between arbitrary number of keys and values. It's optimized such cases too. Object.keys, values, entries create a new object in memory on top of the one you already have.
@KyleLanmon
@KyleLanmon 3 года назад
IMO if you need labels, that is a code-smell
@RoiTrigerman
@RoiTrigerman 3 года назад
it's like goto.. it's EviL!!
@foxoninetails_
@foxoninetails_ 3 года назад
Worth noting for the sake of other readers that code smell *does not* mean bad code. It's just a potential red flag, something to watch out for and be wary that it might be bad code. Labels are extremely useful when you need them, but overuse is definitely something to be careful of.
@keenkidash7616
@keenkidash7616 3 года назад
@@foxoninetails_ Actually is a smell of bad code. If you have to watch out for that chunk, it is bad, indeed, so you are obligated to put more effort into it in order to maintain the code base. Btw, the nested loop example is easy solved by function extraction (and you are allowed to *return* whenever you want to continue to the next iteration)
@foxoninetails_
@foxoninetails_ 3 года назад
@@keenkidash7616 The term "code smell" does not and has never referred to bad code, except when used by people who have no idea what they're talking about. It was coined specifically to refer to code that is often, but not necessarily, indicative of bad design. Labels, like any other code smell, are not inherently bad, but rather should be used sparingly and thoughtfully. They are a valuable tool, but not one which should be used without good reason. And no, "the nested loop example" (which one? I'll assume the most common, breaking out of multiple loops) can't be trivially solved by function extraction. Labels allow you to break or continue from specific levels of a nested loop at any point inside them; to do so via function extraction, in more extreme cases, requires the inner functions to return some form of signal value which tells the previous function that it should also do the same, which becomes an unbelievable mess to manage.
@adicide9070
@adicide9070 3 года назад
yeah i can already see someone senior to me being cool with 3, 4, 5 levels of for loop nesting ;)
@AeroPR
@AeroPR 3 года назад
The For labels seem like a great way of documenting what each of your loops is doing without having to use comments. Even if you don't use them in the execution itself. Just like good variable names avoid unnecessary comments.
@montebont
@montebont Год назад
Never thought of it that way but it sure makes sense. Thanks for sharing :-)
@IceMetalPunk
@IceMetalPunk 3 года назад
I often make a helper function to create "enums" in JS (obvs. not real enums, but close enough for most uses). It just takes a list of strings, and then returns a *frozen* object that maps the strings to Symbols of the string, thereby ensuring that (a) they can't be changed, and (b) they are all unique values. Which is like 2/3 of the use of enums. So for instance, I could do: const Directions = make_enum('UP', 'DOWN', 'LEFT', 'RIGHT'); And the resulting frozen object would have unique symbols referenced as Directions.UP, Directions.DOWN, Directions.LEFT, and Directions.RIGHT.
@aeronwolfe7072
@aeronwolfe7072 Год назад
new sub here, i absolutely LOVE your vids about 5 must know js features, and the other js video. GREAT CONTENT man! Thank you SO MUCH!
@dave6012
@dave6012 3 года назад
Thanks for all the great info! I hope your new courses make you enough money to finally afford furniture
@dave6012
@dave6012 3 года назад
@@Jens-OS challenge? You son of a bitch, i’m in
@spiderman955
@spiderman955 2 года назад
For the loop variables: Is it not just easier and clearer to put the standard continue for i === 1 directly after the first for loop? This would directly increment the i counter.
@hnccox
@hnccox 2 года назад
I thought the same thing, but he probably just needed something easy to show of this example of this functionality.
@lucidattf
@lucidattf 2 года назад
yeah you dont need labels for this at all, labels arent really ever necessary but they can be good to know i guess
@JaekSean
@JaekSean 2 года назад
The point of this was to show the feature, not to show a practical example. This is a feature with a pretty rare use case. It's difficult to come up with a good example until you actually have a use for it
@purduetom90
@purduetom90 2 года назад
These are glorified goto statements…
@hunterwilhelm
@hunterwilhelm 2 года назад
@@purduetom90 I would make the case that break and continue are goto statements. But personally, I try not to use any for loops at all and use map filter and reduce instead
@mattd5419
@mattd5419 3 года назад
When I work with large decimals I use .toFixed() with a + before to round and convert back to a number. Like this: `+num.toFixed(12)`
@tomg0
@tomg0 3 года назад
@@Jens-OS reported for spam
@maelstrom57
@maelstrom57 3 года назад
these console methods are pretty neat, they sure'll make debugging a little less of a pain
@anticsBack
@anticsBack 3 года назад
Another cool but rare piece of JS goodness: JS Proxy API.
@shr1han
@shr1han 3 года назад
I read somewhere that basic state management is possible using Proxy.
@microhoffman1248
@microhoffman1248 3 года назад
Vue reactivity system is based on Proxies, if I am not mistaken. It's where I learnt first to use them :). They are really cool tho.
@lilspelunker5613
@lilspelunker5613 3 года назад
@@microhoffman1248 Yup they are
@lilspelunker5613
@lilspelunker5613 3 года назад
@@Jens-OS nah fuck off
@slowprogrammer
@slowprogrammer 3 года назад
Yaah😃
@rafagd
@rafagd 3 года назад
To properly deal with floating point precision errors caused by IEEE 754, you should write "Math.abs(a - b)
@danmc128
@danmc128 Год назад
The console and debugging stuff was fantastic, thanks for making my job easier!
@jp0678
@jp0678 3 года назад
Thanks for the loop label, console.assert, and console.table tips!
@sanjitselvan5348
@sanjitselvan5348 2 года назад
Man! Feature-packed video! Thanks so much!
@RyanGralinski
@RyanGralinski 3 года назад
I love your videos, Ive been developing sites and software just as a hobby for over 25 years and been stuck in the old ways of doing things. I'm in the process of teaching myself angular and node and your videos are very helpful and easy to follow.
@petarkolev6928
@petarkolev6928 3 года назад
Kyle, amazing video, bro!!! Map & Set just changed my perception of how should I start working with objects and arrays :O
@njahncke
@njahncke 3 года назад
Thanks a ton for these videos man! Lots of awesome stuff in here.
@randymartin9040
@randymartin9040 2 дня назад
I've NEVER seen this label thing for loops that's crazy! Thank you
@williamiiifarquhar4345
@williamiiifarquhar4345 2 года назад
Thank you for this video! I definitely feel like I learned something new.
@brianevans4
@brianevans4 3 года назад
I have a video idea for you: do all the different Object methods such as Object.freeze Object.assign etc etc. I feel like I keep seeing new ones out in the wild
@greenonionsalad
@greenonionsalad 3 года назад
@@Jens-OS How about instead of commenting trying to appeal to people's kindness, you just make some good content?
@defensivecybercoding
@defensivecybercoding 2 года назад
Excellent tutorial! Thanks for the help.
@MarlonEnglemam
@MarlonEnglemam 3 года назад
it's crazy how you apparently always shows some feature I'VE NEVER SEEN BEFORE! which is almost unbelievable to me since I've been around JS for a while lol!
@yadneshkhode3091
@yadneshkhode3091 3 года назад
@@Jens-OS no
@arjix8738
@arjix8738 3 года назад
believe me, all the features he is showing are handy, but not any better than what you already knew (in terms of difficulty)
@mohamedbasry9588
@mohamedbasry9588 3 года назад
@marlon that indicates these features are useless
@MarlonEnglemam
@MarlonEnglemam 3 года назад
@@mohamedbasry9588 I've found many of theses features to be usefull actually! Of course, not all of them, but a lot!
@bradical8198
@bradical8198 2 года назад
Exactly what @prometheas said below, I still reference your videos after all these years over any other video. You get to the point and you get to the point fast! A+ my man!
@tag9047
@tag9047 3 года назад
A lot of this stuff is great with the exception of labels. Most likely you need to refactor some code to use a reducer if you are running nested loops.
@Mitsunee_
@Mitsunee_ 3 года назад
well I definitely didn't know loop labels, so I guess this video actually wasn't clickbait, like all the other ones I've seen with a similar title :) good job!
@obinator9065
@obinator9065 3 года назад
0:15 *then start using typescript*
@keatonlee1157
@keatonlee1157 2 года назад
I can't like this enough! I work in typescript every day and I have found so many incredible things from you. Holy crap you're a boss!
@randomnobody660
@randomnobody660 3 года назад
The labeling loops was very cool. TIL. With that said thou, isn't there something about messing up control flow? Otherwise we could just be using goto instead of increasingly fancy breaks and continues, or even mid-loop returns.
@CathrineMacNiel
@CathrineMacNiel 3 года назад
yes, NEVER USE goto...label.
@ibgib
@ibgib 2 года назад
Great video! For me personally, the Set was the big win. I didn't realize that it was in ES6, but it makes creating a unique array muuuch easier without the need for an external library. Simply `[...new Set(array)]` or `Array.from(new Set(array))`. Of course this is only for primitives where value comparison is trivial! Thanks for the help 🙂
@eproulx
@eproulx 3 года назад
I believe the classic way to work around floating point issues is if(Math.abs(a-b) < Number.EPSILON)
@ben790924
@ben790924 3 года назад
8:15 a handsome glance
@flaviocunha7576
@flaviocunha7576 3 года назад
Most JS I learned in such small amount of time, You are amazing teacher !!!!
@samisaacvicliph
@samisaacvicliph 2 года назад
Man! this should be sold on some learning platform for top dollars. So much valuable information here!! Thank you Kyle!
@warheaven999
@warheaven999 2 года назад
the problem with 0.1+0.2 is not only a computer problem. It's also a programmer problem. They forget to round to the same precision of the source numbers. If you have 1 digit on source, you must round to 1 digit on the result (for a addition), so you HAVE to round 0.3000000000004 to 0.3 to stay in the same précision level.
@Grovion
@Grovion 3 года назад
The problem with 0.1+0.2 not equals 0.3 has been very very simplified in this video. Of course you can store 0.3 in binary. One not very effective but obviously possible solution would be as string. And some libraries that enables you to compute arbitrary big numbers (like BigDecimal in Java) do this. But since normally you want some nice compromise between precision, calculation speed and memory size, the primitive data types for floating point numbers are optimized for the most common use cases. They can store either pretty (but not alway perfect) accurate numbers or very big/very small numbers. But not both at the same time. So the real reason why most programming languages get 0.1+0.2 wrong is not, that if can't be represented in binary but that the representation used in most programming languages can't do it. Most programming languages (including JavaScript) use the IEEE 745 specification for storing floating point numbers. You can read all about it in the official specification (web.archive.org/web/20160806053349/www.csee.umbc.edu/~tsimo1/CMSC455/IEEE-754-2008.pdf ) or look on RU-vid for some videos that explain in in a more digestible form since the specification is 70 pages long. Storing floating point numbers efficiently really isn't easy ;)
@Ayomikun
@Ayomikun 3 года назад
Thanks as always, can think of a couple of situations where loop labels could've helped me a lot. Somehow feels like a bad practice thing that should be used rarely though
@ng429
@ng429 3 года назад
if you find yourself in need of loop labels I can almost guarantee you have code that needs to be restructured anyway
@Voidstroyer
@Voidstroyer 3 года назад
@@ng429 I agree. loop labels are unnecessary if you know how to properly nest your loops (if nesting if necessary at all)
@lawrencedoliveiro9104
@lawrencedoliveiro9104 3 года назад
12:18 “for (k in «obj»)” loops over the keys in the object table. And you can have non-string keys in those, too.
@multiwebinc
@multiwebinc 3 года назад
Another way to check number equality is to use Number.EPSILON. So if you want to see if 0.1 + 0.2 equals 0.3, just do: (0.1 + 0.2) - 0.3 < Number.EPSILON // true
@dean6046
@dean6046 3 года назад
Thanks Kyle! Downloaded this to watch later. Keep up the good work. Constantine
@AryoPinandito
@AryoPinandito 3 года назад
Wow. cool tips! I didn't realize that Javascript has all those features. Can you unfreeze an object later after you froze it?
@CathrineMacNiel
@CathrineMacNiel 3 года назад
No, but you can simply clone it and reassign the variable. like `obj = JSON.parse(JSON.stringify(obj));`
@avi12
@avi12 3 года назад
10:45 That strange sound
@wallacesantos0
@wallacesantos0 3 года назад
I thought something was wrong with my headphone. I had to go back to check
@大盗江南
@大盗江南 3 года назад
Amazing job, buddy! Amazing!
@harsh_vish
@harsh_vish 3 года назад
This video is very informative I did not know the power of javascript GREAT
@cantirv
@cantirv 3 года назад
To compare floating points is better to use a function like var areEqual = (a,b)=>Math.abs(a-b)
@fvbixn
@fvbixn 3 года назад
Great video! I think I’m now officially a JavaScript Nerd, since I already knew all these features 😁
@tmonVX
@tmonVX 2 года назад
So for binary calculations I always use function fix2(x) { return Number.parseFloat(x).toFixed(2); } This way I always have 2 (or as many as I specify) number of decimals.
@atatdotdot
@atatdotdot 3 года назад
If you do a lot of floating point comparison, you might be best making a nearly_equal function that does something like this: > nearly_equal = (a, b, ε) => Math.abs(a - b) < ε; [Function: nearly_equal] > nearly_equal(0.35, 0.34, 0.001) false > nearly_equal(0.35, 0.34998, 0.001) true > nearly_equal(0.35, 0.3500001, 0.001) true > nearly_equal(0.35, 0.354, 0.001) false Although, apparently, this is "wrong" according to this guide floating-point-gui.de/errors/comparison/, which offers a more complex and thorough solution if you really care about precision.
@ventsislavstoimenov4404
@ventsislavstoimenov4404 3 года назад
Man, this is simply amazing! Great content!
@dimaster5880
@dimaster5880 3 года назад
Nice tips. Want to see your chrome dev tools tutorial...
@tcjusttc5418
@tcjusttc5418 2 года назад
I love your vids!! High value
@inordirectional
@inordirectional 3 года назад
Those debugger tips are gonna be super useful! Thanks!
@sskroller5276
@sskroller5276 3 года назад
The labels work like in assembly that’s nice
@techgo4431
@techgo4431 3 года назад
that's because that's where it comes from, labels are a relic of the old way of programming
@derghiarrinde
@derghiarrinde Год назад
I always learn most from this kind of general-code videos.
@mob_abominator1868
@mob_abominator1868 3 года назад
That last debugging part was insane, didn't know you could do so much with console.
@elierh442
@elierh442 3 года назад
wow, this is packed with stuff I did know existed! thank you for this!
@bipolarmorgan
@bipolarmorgan Год назад
Quality information, thanks
@evilwizard7931
@evilwizard7931 3 года назад
wouldn't "continue 2;" break out to the second level? I know it works like that in other languages, like php for allowing to break out of switch blocks inside loops
@IceMetalPunk
@IceMetalPunk 3 года назад
Nope, JS doesn't have that feature. That's what labels are for.
@remiblaise
@remiblaise 3 года назад
Well, you can name your label "2: "
@evilwizard7931
@evilwizard7931 3 года назад
@@remiblaise I'd rather rewrite the code so labels wouldn't be needed lol
@IceMetalPunk
@IceMetalPunk 3 года назад
@@evilwizard7931 There are a lot of cases where the non-label approach just means setting a sentinel variable that the outer loop checks to decide when to break. But that gets a bit spaghetti when you have more than just two nested loops, so labels are better for that use case.
@doktordaxter
@doktordaxter 3 года назад
Very interesting stuff. I knew about some of these, but don't use it often. You explain it well and give good examples which makes it easy to understand, I will try to find use cases for these in my projects :)
@gyorgyo7597
@gyorgyo7597 3 года назад
Excellent video. Is it best to no longer use semi-colons?
@GNXClone
@GNXClone 2 года назад
@16:54 Why not instead cast to an integer? if (int(x * 100) == 35) {} The arbitrary range check feels wrong because it’s indeterministic.
@Berk45632
@Berk45632 3 года назад
You debugged my entire life with that "debugger" keyword. Kyle, I luv ya so much.
@swimtlvmitnovizki6895
@swimtlvmitnovizki6895 3 года назад
I learn so much from your videos. Thank you for the effort you put into your work.
@silvgravity4492
@silvgravity4492 3 года назад
Hey Kyle, is there any option to purchase just the advanced portion of the course? I already have a job as a full stack JS developer but I'd like to sharpen my skills with advanced knowledge
@WebDevSimplified
@WebDevSimplified 3 года назад
Unfortunately that is not possible. It is only sold as a bundle.
@pouriyanourouznejad7090
@pouriyanourouznejad7090 3 года назад
Will "break" stop some Functions like interval or timeout? Or we can only use clearthem() to make them stop?
@LuisGustavo-dk4qy
@LuisGustavo-dk4qy 3 года назад
When I started coding, I started with VBA, and people used to say that the loop1 thing was really bad. Never really knew why.
@ferooref7614
@ferooref7614 3 года назад
Highly appreciated, REALLY!
@jordanhildebrandt3705
@jordanhildebrandt3705 3 года назад
Dagummit i wish I'd known about console.time before writing a bunch of smelly homebrew profiling crap. Great video!
@mastermaster8651
@mastermaster8651 2 года назад
debugger looks very usefull i think it worth a whole ep on debugger usage
@AutisticThinker
@AutisticThinker 3 года назад
Awesome video as usual. I can't wait until you embrace TypeScript; I learn so much from your videos! :)
@WebDevSimplified
@WebDevSimplified 3 года назад
I really want to dive back into Typescript this year.
@antiNuetron
@antiNuetron 3 года назад
"debugger" was the only way to break in javascript 17+ years ago. So much easier now.
@MegaArti2000
@MegaArti2000 3 года назад
console.table was mind blowing, I must admit.
@cryptoknight7256
@cryptoknight7256 3 года назад
Great tips. Thanks, Kyle!
@baoyuan3955
@baoyuan3955 3 года назад
Does the complete package contain the six bonus projects? Very interested in this course! Thanks!
@WebDevSimplified
@WebDevSimplified 3 года назад
It does not. Only the premium package contains the bonus projects.
@arunavamajumder7098
@arunavamajumder7098 Год назад
console.table was a killer !! thanks a lot Kyle !!
@natiqmumtaz5309
@natiqmumtaz5309 3 года назад
Great video, thanks Kyle ✌️
@wmpowell8
@wmpowell8 2 года назад
Regarding the fact that 1/10 in binary is a repeating decimal, I did the math and found out 1/10 = .0{0011} in binary, with the braces representing repeating decimals. 2/10 = 1/5 = .{0011}. 3/10 = .0{1001}.
@martinstefcek4089
@martinstefcek4089 3 года назад
If you need to compare floating point number please don't do if (a>9.99995 && a
@thiagohencke7230
@thiagohencke7230 3 года назад
Amazing features, didn't know some of them. Subscribed
@doltramir
@doltramir 2 года назад
Use this for equality check of floats: abs(x - 0.35)
@yanfoo
@yanfoo 3 года назад
At 16:30, that example is still a bad example. To check floating point numbers, you have to check for the detla difference. Something like : if (Math.abs(x - 0.35) < delta) where the delta is any precision of tolerence. For example, let's say the tolerence is 0.001, then : if (Math.abs(x - 0.35) < 0.001) will be true if x is between 0.3499 and 0.3501
@nilsdannemann
@nilsdannemann 2 года назад
Wonderful, thank you
@TodorescuProgramming
@TodorescuProgramming 3 года назад
really really cool! instead of putting 10000000 you can do 10**7
@tatianabasileus
@tatianabasileus 3 года назад
10e7 is even easier for this particular case, but it's cool to know the exponentiation operator works in JavaScript too!
@TodorescuProgramming
@TodorescuProgramming 3 года назад
@@tatianabasileus didn't know 10e7 works too , cool!
@ErosNicolau
@ErosNicolau 3 года назад
On checking numbers with decimals: how about instead of if (i === .35) you're doing: if (i*100 === 35)?
@heyheyhey0220
@heyheyhey0220 2 года назад
That doesn't solve the issue
@surlacolline
@surlacolline 3 года назад
What I would have done for decimal calcul is : if (x.toFixed(2) === 0.35) {}
@TheLetsComment
@TheLetsComment Год назад
Its not "much harder" to iterate over an Object compared to a Map, just use Object.keys, Object.values or Object.entries, and you will get an Array of the keys, values or key value pairs respectively. You can use Array.foreach, ...etc
@BugsNRoses_
@BugsNRoses_ 3 года назад
Thats some info kyle, i used to give colors to console log, just to get out from confused outputs, i wish i knew assert before,
@ayushsamantaray9868
@ayushsamantaray9868 3 года назад
Thank you very much for the set function
@epicmap
@epicmap 3 года назад
10:45 omg my ears, that noise hurts so much.
@carneios08
@carneios08 3 года назад
Didn't know about the console.assert(). Thanks for adding that to my logging arsenal.
@JB-mm5ff
@JB-mm5ff 3 года назад
Increment i at the end of the loop if it equals 0? Will skip i=1, no goto.
@agbottan
@agbottan 3 года назад
Thanks! I learned some good stuff.
@mymoomin0952
@mymoomin0952 3 года назад
If you're making heavy use of Object.freeze for functional-style programming, I'd also recommend an immutable data structure library like immer, which does a bunch of stuff behind the scenes to make things easier and faster
@Danielo515
@Danielo515 3 года назад
I don’t think immer does anything faster
Далее
100+ Web Development Things you Should Know
13:18
Просмотров 1,5 млн
Как он понял?
00:13
Просмотров 93 тыс.
Kenji's Sushi Shop Showdown - Brawl Stars Animation
01:55
The Most Important Skill You Never Learned
34:56
Просмотров 206 тыс.
The Weird History of JavaScript
12:09
Просмотров 1,2 млн
Learn JavaScript Generators In 12 Minutes
12:11
Просмотров 176 тыс.
5+ Must Know HTML Tags That Almost Nobody Knows
15:33
Просмотров 615 тыс.
Junior Vs Senior Code - How To Write Better Code
22:13
All The JavaScript You Need To Know For React
28:00
Просмотров 618 тыс.
Learn Event Delegation In 10 Minutes
9:57
Просмотров 57 тыс.
JavaScript Pro Tips - Code This, NOT That
12:37
Просмотров 2,5 млн
Как он понял?
00:13
Просмотров 93 тыс.