5 rzeczy, których nie wiesz o JavaScript
JavaScript to piękny język. Ma on swoje tajemnice, o których wiele osób nie wie, a które potrafią zaskoczyć. Oto lista kilku takich sekretów.
1. NaN to liczba
Czy wiedzieliście, że NaN
to liczba? NaN
, czyli Not a Number, gdy rozwiniemy skrót, to tak naprawdę liczba.
console.log(typeof NaN); //number
Co więcej, NaN
nie jest nawet sobie równe i nie równa się żadnemu innemu obiektowi. Jeśli musicie sprawdzić, czy cokolwiek występuje jako NaN
, to musicie użyć isNaN()
.
NaN === NaN // false
isNaN(NaN) //true
2. Operator void
W JavaScript występuje operator void
. Zastanawiacie się pewnie, co taki operator może w JS robić. A więc bierze jakiekolwiek wyrażenie, które po nim występuje, uruchamia je i zawsze zwraca undefined
. Brzmi bezużytecznie? Chyba brzmi, a przynajmniej tak mi się wydawało.
void {}; // undefined
void "any text at all"; // undefined
void (() => {}); // undefined
let a = 0;
void a; // undefined
Czy potrzebujemy w ogóle czegoś takiego? O dziwo jak najbardziej. Używa się go do definiowania undefined
. W sumie to nawet nie wiedziałem, że undefined
można zdefiniować.
(() => {
const undefined = "foo";
console.log(undefined, typeof undefined); // "foo", "string"
console.log(void 0, typeof void 0); // undefined, "undefined"
})();
Ponieważ undefined
nie jest słowem kluczowym, to można go użyć jako nazwy zmiennej, aby nadpisać wartość globalną w zakresie.
3. IIFE, czyli Immediately Invoked Function Expression
To chyba nie jest aż taka tajemnica. IIFE to tak naprawdę funkcja, którą da się wywołać zaraz po swojej definicji. IIFE jest zazwyczaj opakowywane w okrągłe nawiasy, po których następują kolejne okrągłe nawiasy - ma to na celu wywołanie zdefiniowanej funkcji.
() => {
// …
})();
Gdy funkcja posiada zwracany typ lub gdy jest przypisana do zmiennej, to nie musimy tego robić.
void function () {
// …
}();
const result = function () {
// …
}();
4. Operator in
Jednym z rzadziej używanych operatorów w JS jest operator in
. Jego celem jest sprawdzenie, czy dany obiekt zawiera odpowiednią właściwość.
let obj = { x: 1, y: 2, z: 3 };
"x" in obj; // true
"a" in obj; // false
Ale po co nam operator in
, kiedy możemy to sprawdzić przy pomoc object[property]
? Bo daje nam wygodę sprawdzania, czy jakakolwiek właściwość jest obecna, nawet jeśli posiada ona jakiekolwiek wartości false
. W takich przypadkach zazwyczaj korzystamy z:
typeof obj[prop] === "undefined"
Zamiast powyższego możemy też użyć:
"prop" in obj
5. Null jest obiektem
Wszyscy zakładaliśmy, że null
informuje nas o tym, iż nie ma obiektu. Spróbujmy jednak sprawdzić, jaki null
ma typ:
console.log(typeof null); //object
No ale null
nie jest też instancją obiektu, ponieważ wskazuje na brak jakiejkolwiek wartości. A zatem:
console.log(null instanceof Object); // false
Podsumowanie
Powyższe to tylko kilka koncepcji JS, o których nie miałem zielonego pojęcia. Mam nadzieję, że się Wam przydadzą. Dajcie znać w komentarzach, czy o nich wiedzieliście. A może znacie jeszcze inne?
Oryginał tekstu w języku angielskim możesz przeczytać tutaj.