Pogadajmy dziś o magicznym operatorze in
. Czemu magicznym? Bo wiele razy o nim słyszałam, ale w praktyce – nigdy go nie widziałam.
Szczypta teorii
Operator in
służy do sprawdzenia, czy dany obiekt zawiera określoną właściwość.
Przykład:
const obj = { a: 1, b: 2, c: 3 };
"a" in obj; // true
"d" in obj; // false
const arr = ["one", "two", "three"];
0 in arr; //true
3 in arr; //false
"one" in arr; //false
Ok, fajnie – powiesz – ale po co w ogóle z niego korzystać? Czym on różni się od składni obj[prop]
?
Ekhm, dobre pytanie.
Po co mi to?
Dobrze jest sprawdzać za pomocą operatora in
obecność właściwości, które mogą posiadać nieprawdziwe wartości (lub bardziej zrozumiale – po prostu falsy values).
Przypomnijmy sobie podstawowe wartości, które w świecie JS są falsy, czyli konwertują się do false
lub są równoznaczne false
:
false
null
;NaN
;0
;- pusty ciąg znaków (
""
/''
/``
); undefined
.
Dla przykładu – sprawdźmy obecność właściwości o nieprawdziwych wartościach za pomocą składni obj[prop]
oraz operatora in
:
const obj = { a: undefined, b: "", c: false };
typeof obj["a"] === "undefined"; //true
"a" in obj; // true
obj.b === ""; //true
"b" in obj; // true
obj["c"] === false //true
"c" in obj; //true
Widzimy teraz, że operator in
wydaje się być najbardziej bezpieczną, uniwersalną metodą na sprawdzanie właściwości o nieprawdziwych wartościach.
Uwaga!
Kiedy korzystasz z operatora in
, bądź czujny w przypadku usuwania wartości! Pamiętaj – aby je skutecznie usunąć, musisz użyć operatora delete
.
const obj = { a: 1 };
"a" in obj; // true
delete obj.a;
"a" in obj; // false
const arr = ["one", "two", "three"];
1 in arr; //true
delete arr[1];
1 in arr; //false
A teraz powiedz szczerze – znałeś wcześniej operator in
? Czy go stosowałeś w praktyce? Koniecznie napisz mi w komentarzu odpowiedzi na te pytania. Jestem szalenie ciekawa, ilu z Was odpowie na oba pytania TAK!