W artykule znajdują się 3 nowości z ECMAScript 2017, poprawiajace jakość pracy. Dodatkowo jedna z tych nowości lubi pojawiać się na rozmowach kwalfikacyjnych.
Na początek gwóźdź programu co zwróci konsola:
const tab = [1, 2, 3,,,] console.log(tab.length); console.log(tab.toString())
wynik:
console.log(tab.length); //5 //WAT?
console.log(tab.toString()) // 1,2,3,,
Sam dałem się niedawno wpuścić w maliny na rozmowie kwalfikacyjnej, tym przykladem, spodziewałem się o jeden element wiecej w tablicy.
Mechanizm stojacy za tym zachowaniem to Trailing commas.
Powstał by ułatwiac życie programistów, chodzi o to by w momecie pisania kodu, nie musieć za każdym razem usuwać ostatni przecinek(zdarza mi się to niemal codziennie).
Kilka przykladów:
const obj ={ foo:"foo", bar:"bar", } function( foo, bar, good, ){} const hakunaMakata = (timon,pumba,) => `$timon i ${pumba}` Math.max(101, 20,);
kilka niewłasciwych użyć, które spowodują wyjątki w runtime.
function test(,) {} // SyntaxError: missing formal parameter (,) => {}; // SyntaxError: expected expression, got ',' test2(,) // SyntaxError: expected expression, got ',' function f(...p,) {} // SyntaxError: parameter after rest parameter (...p,) => {} // SyntaxError: expected closing parenthesis, got ',' const [a, ...b,] = [1, 2, 3]; // SyntaxError: rest element may not have a trailing comma JSON.parse('[1, 2, 3, 4, ]'); JSON.parse('{"foo" : 1, }'); // SyntaxError JSON.parse: unexpected character
Dwie pozostałe nowości to, metody obiektu String:
String.prototype.padEnd()
String.prototype.padStart()
Są użyteczne ponieważ pomagają uzyskać, stringi o równej dlugości.
'100'.padStart(8, "0"); // "00000100"
Idealne do rysowania choinek stringami, drukowanie retro liczników, ogólnie do wyrównywania tekstu w wierszach, bądz wstepnej obróbki przed przycieńciem tekstu.
W kolejnym wpisie chciałbym poruszyć prawdziwy gamechanger, który pojawił się w ECMAScript 2017 czyli funcje asynchroniczne