Uważaj na wymuszanie typu: ta zaawansowana funkcja może być przyczyną subtelnych błędów, więc upewnij się, że wiesz, jak to działa.

Dynamiczne pisanie w JavaScript oznacza, że ​​Twój kod może być nieco prostszy, ale nadal możliwe jest popełnianie błędów. Aby ich uniknąć, warto wiedzieć, jak JavaScript rozwiązuje wartości różnych typów, aby je porównać.

Zrozumienie konwersji typów i wymuszania w JavaScript ma kluczowe znaczenie dla pisania niezawodnych i wydajnych programów. Każda koncepcja ma określone przypadki użycia i najlepsze praktyki, które mogą wpływać na zachowanie kodu.

Dlaczego w JavaScript występuje konwersja i wymuszanie typów?

Język JavaScript jest pisany dynamicznie. Oznacza to, że w przeciwieństwie do języków o typie statycznym JavaScript nie wymaga jawnego definiowania typu danych zmiennej przed jej użyciem. Zamiast tego JavaScript określa typ w czasie wykonywania w zależności od wartości zmiennej.

Ponieważ typy danych nie są jawnie deklarowane do czasu wykonania, kiedy wykonujesz operacje wymagające różnych danych typów, JavaScript automatycznie sprawdza ich wzajemną zgodność pod kątem operacji, którą chcesz wykonać. Jeśli są ze sobą kompatybilne, operacja przebiega normalnie.

instagram viewer

Załóżmy jednak, że są one niezgodne z operacją — na przykład próbą dodania ciągu znaków i liczby. W takich przypadkach JavaScript automatycznie „wymusza” jeden z typów, aby pasował do drugiego, aby upewnić się, że operacja się powiedzie, zamiast zgłaszać błąd. Ten proces jest znany jako wymuszanie typów lub wymuszanie niejawne.

Wpisz przymus

Narzucanie typu to automatyczna konwersja wartości z jednego typu danych na inny, wykonywana przez JavaScript podczas działania programu, aby zapewnić pomyślne wykonanie operacji.

Ale nie wszystkie typy danych można wymusić. Ciąg, liczba i wartość logiczna są jedynymi Typy danych JavaScript że język przekształci się w inny typ. Gdy spróbujesz wykonać niezgodną operację z typami danych, których JavaScript nie może wymusić, zgłosi błąd.

JavaScript wymusza typy na podstawie typu operacji i operatora użytego w operacji.

Przymus za pomocą operatora „+”.

W JavaScript „+” ma dwa różne zachowania w zależności od typów jego operandów. Może wykonywać zarówno dodawanie numeryczne, jak i konkatenację łańcuchów. Może to prowadzić do wymuszania typu, gdy jeden z operandów nie jest oczekiwanego typu.

Jeśli oba operandy są liczbami, „+Operator ” wykonuje dodawanie:

pozwalać liczba1 = 42;
pozwalać liczba2 = 10;
pozwalać suma = liczba1 + liczba2; // Dodatek
konsola.log (suma); // 52

Jeśli oba operandy są ciągami znaków, „+Operator ” wykonuje konkatenację napisów:

pozwalać str1 = "Cześć";
pozwalać str2 = "świat";
pozwalać wynik = str1 + " " + str2; // Konkatenacja łańcuchów
konsola.log (wynik); // "Witaj świecie"

Jeśli jednak jeden z operandów nie jest łańcuchem, JavaScript niejawnie przekształci go w łańcuch przed wykonaniem konkatenacji:

// Liczba i łańcuch
pozwalać liczba = 42;
pozwalać str = "Cześć";

// num jest zamieniane na ciąg znaków, a następnie łączone
pozwalać wynik_1 = liczba + ciąg;
konsola.log (wynik_1); // "42Cześć"

// Łańcuch i wartość logiczna
pozwalać bool = PRAWDA;

// bool jest przekształcany w ciąg znaków, a następnie łączony
pozwalać wynik_2 = log + str;
konsola.log (wynik_2); // "prawdziwe cześć"

Przymus za pomocą operatora „-”.

W JavaScript „-Operator ” jest używany głównie do operacji odejmowania. Gdy jeden lub oba operandy w operacji obejmującej „-” nie jest liczbą, JavaScript spróbuje przekształcić go w liczbę.

Gdy oba operandy są liczbami, JavaScript wykonuje odejmowanie. Wykonuje również odejmowanie, gdy jeden lub oba operandy są łańcuchami reprezentującymi liczbę:

konst liczba1 = 10;
konst liczba2 = 20;
konst wynik_1 = liczba2 - liczba1; // Odejmowanie
konsola.log (wynik_1); // 10

konst strNum = "10";
konst strNum2 = "20";
konst wynik = strNum2 - strNum; // Wpisz przekształcenie liczb, a następnie odejmowanie
konsola.log (wynik_1); // 10

Gdy żaden z operandów nie jest liczbą ani łańcuchem reprezentującym liczbę, JavaScript spróbuje zmusić typ danych do jego liczbowego odpowiednika. Jeśli typ danych nie ma odpowiednika liczbowego, operacja zostanie zwrócona NaN (Nie liczba):

// true zostaje zmienione na 1, false na 0
konst boolLiczba = PRAWDA;
konst boolLiczba2 = FAŁSZ;
konst wynik_1 = boolNum - boolNum2;
konsola.log (wynik_1); // 1

// puste tablice zostają przekonwertowane na 0
konst arrNum = [];
konst arrNum2 = [];
konst wynik_2 = arrNum - arrNum2;
konsola.log (wynik_2); // 0

// puste obiekty zostają przekonwertowane do NaN
konst objNum = {};
konst wynik_3 = arrNum - objNum;
konsola.log (wynik_3); // 0 - NaN = NaN

W tym przykładzie JavaScript wymusza wartości logiczne PRAWDA I FAŁSZ ich liczbowym odpowiednikom, 1 I 0, odpowiednio. Puste tablice są wymuszane 0, i puste obiekty są wymuszane NaN.

Przymus z operatorami równości (==)/().

W JavaScript operatory równości (== I ) porównaj wartości dla równości. Jednak zachowują się inaczej z powodu przymusu typu.

==” (luźna równość) operator wykonuje wymuszanie typu, co oznacza, że ​​przed porównaniem próbuje przekonwertować operandy na ten sam typ:

"10" == 10; // PRAWDA

W tym przykładzie JavaScript zamienia ciąg „10” na liczbę 10, więc wyrażenie ma wartość PRAWDA.

Jednakże "Operator ” (ścisła równość) nie wykonuje wymuszania typu. Wymaga, aby wartość i typ były takie same, aby porównanie zostało zwrócone PRAWDA:

"10"10; // FAŁSZ

W tym przykładzie porównanie powraca FAŁSZ ponieważ operandy są różnych typów (łańcuch i liczba).

Generalnie powinieneś używać tzw (ścisła równość) w JavaScript, aby uniknąć nieoczekiwanego zachowania wymuszonego typu.

Wymuszanie typu lub niejawna konwersja mogą prowadzić do nieoczekiwanego zachowania ze względu na ich automatyczny charakter. W przypadkach, gdy trzeba przekonwertować typy, zaleca się jawną konwersję typów. Proces jawnej konwersji typów jest znany jako konwersja typów. Nazywa się to również rzutowaniem typów i jawną konwersją typów.

Konwersja typów

Konwersja typów, znana również jako rzutowanie typów, to jawny proces konwersji wartości z jednego typu danych na inny w JavaScript przy użyciu wbudowanych funkcji, takich jak Numer(), Strunowy(), Wartość logiczna(), parseInt(), I parseFloat().

Możesz przeprowadzić konwersję typu, przekazując jako argument wartość, którą chcesz przekonwertować, do wbudowanych funkcji konwersji. Funkcje te następnie konwertują twoją wartość na żądany typ.

Oto przykład użycia Numer() funkcjonować:

konst liczbaStr = "123";
konst liczba = Numer(liczbaStr); // Konwertuje łańcuch znaków na liczbę
konsola.log (liczba); // 123

Przekazanie ciągu znaków, który jest prawidłową liczbą, jako argumentu do metody Numer() funkcja zwróci liczbę. Przekazanie ciągu, który jest niepoprawną liczbą, spowoduje zwrócenie NaN.

Oto przykład użycia Strunowy() funkcjonować:

konst bool = PRAWDA;
konst str2 = Strunowy(bool); // Konwertuje wartość logiczną na ciąg znaków
konsola.log (str2); // "PRAWDA"

Przekazywanie dowolnego typu danych do z wyjątkiem symbolu do Strunowy() funkcja przekonwertuje typ danych na łańcuch.

Oto przykład użycia Wartość logiczna() funkcjonować:

// Konwersja ciągu znaków na wartość logiczną (prawda: prawda, fałsz: fałsz)
konst str = "Witam";
konst bool2 = logiczne(str);
konsola.log (bool2); // PRAWDA

Przekazywanie prawdziwych wartości do Wartość logiczna() funkcja zwraca wartość logiczną „prawda”, podczas gdy przekazując wartości fałszywe zwraca wartość logiczną „fałsz”.

Oto przykład użycia ParseInt() I ParseFloat() funkcjonować:

// Konwersja łańcucha na liczbę całkowitą
konst liczbaStr = "123.00";
konst liczba1 = parseInt(liczbaStr);
konsola.log (liczba1); // 123

// Konwersja łańcucha na liczbę zmiennoprzecinkową
konst floatStr = "3.14";
konst liczba2 = parseFloat(liczba zmiennoprzecinkowa);
konsola.log (liczba2); // 3.14

The parseInt() funkcja analizuje argument łańcuchowy i zwraca liczbę całkowitą. The parseFloat() funkcja konwertuje ciąg znaków na liczbę zmiennoprzecinkową.

Wykorzystanie przymusu typu i konwersji

Dzięki zrozumieniu wymuszania i konwersji typu możesz podejmować świadome decyzje dotyczące tego, kiedy i jak skutecznie wykorzystać je w swoim kodzie. Ważne jest, aby zachować właściwą równowagę, rozsądnie stosując wymuszanie typów w celu uzyskania zwięzłego i wygodnego kodu oraz polegając na jawnej konwersji typów w przypadku zamierzonych i przewidywalnych konwersji typów.