Typy danych w javascript: podstawowe pojęcia, sprawdzanie, konwersja

Jeśli programista pracował z językami takimi jak C # lub Java, wiedzą, że aby zadeklarować zmienną, muszą ustawić statystyczny typ danych, który będzie przechowywany w określonej zmiennej od początku. W przypadku konieczności zmiany wartości danej zmiennej na inny typ, system wygeneruje błąd. W przeciwieństwie do tego, JavaScript ma dynamiczny typ danych i nie ma potrzeby określania, jaki typ będzie przechowywał zmienną, ponieważ JS będzie próbował rozwiązać problem zgodnie z podanymi wartościami podczas wykonywania kontekstu.

Podstawy danych w JavaScript

Podstawy danych w języku JavaScript

Dane JS dzielą się na dwie grupy: prymitywne i obiektowe. Do tych pierwszych należą String, dane logiczne - prawda lub fałsz (Logical), oraz liczby (Number). Istnieją dwa inne specjalne typy prymitywów: Null i Undefined. To demonstruje powiązane ze sobą, nieuporządkowane typy danych w JavaScript, które mają nazwę i właściwości.

Obiekty są specjalnie tworzone przez programistę, wśród nich kilka specjalnych: global, prototyp, tablice, funkcje, klasa, klasy predefiniowane JS, klasa RegExp do zarządzania wyrażeniami regularnymi i znajdowania wzorców w tekście, klasa błędów do przechowywania informacje dotyczące błędów. Pierwsze języki programowania nie używały obiektów, tylko zmienne.

Zmienne to przestrzeń pamięci komputera, do której programiści przypisują zawartość, najczęściej o wartości liczbowej, typu znakowego lub łańcucha znaków - wartości alfanumerycznej składającej się wyłącznie z tekstu wymieszanego z liczbami. Jako przykład typu danych JavaScript, możesz zdefiniować zmienną "a", która zawiera 32, i napisać ją jako:

a = 32.

Możesz wtedy zmienić wartość "a" i zrobić:

a = 78.

Albo uczynić "a" odpowiednikiem wartości innej zmiennej "b", np:

a = b,

Zmienne to obiekty elementarne: liczba, symbol, wartość true lub false, natomiast, jako obiekty to typy złożone, które mogą być tworzone przez wiele informacji. Ale obie formy zajmują tę samą przestrzeń pamięci, która może być mniej lub bardziej duża.

Typy prymitywne

Typy prymitywne

W przeciwieństwie do obiektów, prymitywne typy danych w JavaScript nie są referencyjne, tj. kiedy przypisujemy wartość z innej zmiennej do.

W JS istnieją takie prymitywne typy:

  • logiczne;
  • numeryczny;
  • małe litery;
  • zero;
  • nieokreślony.

Logika reprezentuje jedno z: "prawdziwy" lub "fałszywy".

  • var boo1 = true;
  • var boo2 = false;

W JS jest tylko jeden rodzaj liczby i można ją zapisać z lub bez przecinka. Zdarza się też numer:

  • +Infinity;
  • -Infinity;
  • NaN(nie jest liczbą).

var num1 = 32;

var num2 = + infinity;

Linie służą do przechowywania tekstu. Muszą one znajdować się wewnątrz podwójnych lub pojedynczych cudzysłowów. Ciągi są niezmienne w JS.

var str1 = "hello, it`s me";

var str2 = "Witam, to ja";

Zmienna, która nie ma wartości, nie zdefiniowana.

var test Var;

konsola.log (testVar); // nie zdefiniowane

Boolean - jest to rodzaj typ danych, który zwraca jedną z dwóch rzeczy: prawda/fałsz. Typ danych JavaScript Boolean jest nazwany na cześć matematyka George`a Boole`a, więc jest zawsze pisany wielką literą. Możliwe jest wykazanie zasada działania tego typu w przykładzie:

  1. Otwórz konsolę JS i wpisz każde z poniższych stwierdzeń, naciskając "Enter" po każdym działaniu, aby zobaczyć wynik.
  2. Zwróć uwagę, że po każdym stwierdzeniu jest używany komentarz jednowierszowy, aby wyjaśnić, co ono oznacza.
  3. 1<10 // 1 jest mniejsze niż 10?
  4. 100> 2000 // 100 jest większe niż 2000?
  5. 2 == 2 // 2 jest dokładnie jak 2?
  6. false == false //
Funkcja boolowska

Funkcja Boolean zwraca wartość zmiennej typu boolean. Może być również użyty do wyszukiwania logicznego wyniku warunku i wyrażenia, pozwala to JavaScriptowi na użycie funkcjonalnego typu danych.

Niezmienne symbole

Symbole są nowym prymitywnym typem w JS. Są one tworzone za pomocą funkcji:

const mySymbol = Symbol(`mySymbol`).

Za każdym razem, gdy programista wywołuje tę funkcję, tworzony jest nowy, unikalny symbol. Można ich używać jako stałych do reprezentowania takich pojęć jak kolory. Znaki są najczęściej używane jako klucze właściwości i nigdy nie są sprzeczne z żadnym innym kluczem - znakiem lub łańcuchem. Na przykład, można uczynić obiekt iteracyjnym, używanym przez pętlę "for-of" i inne mechanizmy języka, używając symbolu przechowywanego w "Symbolu.iterator" jako klucz.

Niezmienne symbole

String A używa symbolu jako klucza metody. Ten unikalny token sprawia, że obiekt jest powtarzalny i pozwala na użycie pętli "for-of". Nie jest możliwe rzutowanie znaków na ciągi, ponieważ istnieje wymuszona lub domyślna konwersja typów danych JavaScript. Zabronienie współbieżności zapobiega niektórym błędom, ale także komplikuje obsługę znaków.

Nowym typem prymitywów są tokeny, które służą jako unikalne identyfikatory. Programista tworzy symbole za pomocą funkcji fabrycznej "Symbol()", która luźno przypomina "String" - zwracając po wywołaniu ciągi znaków:

const symbol1 = Symbol();

Symbol() posiada opcjonalny parametr string, który pozwala nadać nowo utworzonemu symbolowi opis. Ten opis jest używany, gdy znak jest konwertowany na ciąg znaków za pomocą "toString()" lub "String()".

Operatory arytmetyczne

JS, jak wszystkie języki programowania, ma wbudowaną zdolność do robienia matematyki, jak kalkulator. Wykonują je na liczbach lub zmiennych, które są reprezentowane jako liczby.

Operatory arytmetyczne

Operator dodawania jest reprezentowany przez znak plus (+), dodaje dwie wartości i zwraca sumę.

var x = 2 + 2; // x zwraca 4

Operator odejmowania, reprezentowany przez znak minus (-), odejmuje dwie wartości i zwraca różnicę.

var x = 10 - 7; // x zwraca 3

Operator mnożenia reprezentowany przez gwiazdkę (*) mnoży dwie wartości i zwraca produkt.

var x = 4 * 5; // x zwraca 20

Operator podziału reprezentowany przez ukośnik (/) dzieli dwie wartości i zwraca iloraz.

var x = 20 / 2; // x zwraca 10

Mniej znany jest operator modulus, który zwraca resztę po podzieleniu, reprezentowaną przez znak procentu (%).

var x = 10 % 3; // zwraca 1

Oznacza to, że "3" wchodzi w "10" trzy razy, z "1" jako resztą.

Inkrementacja wykonuje działanie, w którym liczba zostanie zwiększona o jeden przy użyciu operatora inkrementacji reprezentowanego przez podwójny znak plusa (++).

var x = 10;x++; // x zwraca 11

Następuje to po przypisaniu. Można też napisać, co dzieje się przed zadaniem. Dla porównania:

++x;

var x = 10;

var y = x++;

// y jest 10, x jest 11;

jak również:

var x = 10;

var y = ++x;

// y jest 11, x jest 11.

Dekrementacja - liczba zostanie zmniejszona o jeden przy użyciu operatora dekrementacji reprezentowanego przez podwójny znak minus (--).

var x = 10;x -;

// x zwraca 9

Jak wyżej, można to również zapisać:--x;

Odmiany operatorów JS:

  • operator przypisania;
  • operatory arytmetyczne inkrementacji i dekrementacji;
  • operatory równości;
  • operatorów relacyjnych;
  • operatory logiczne.

Funkcje prawda lub fałsz

Operatory porównania ocenią równość lub różnicę dwóch wartości i zwrócą "true" lub "false". Są one zazwyczaj używane w wypowiedziach logicznych. Dwa znaki równości (==) oznaczają w JS równość. Dla początkujących programistów, łatwo jest się pomylić pomiędzy pojedynczymi, podwójnymi i potrójnymi znakami równości, musisz pamiętać, że pojedynczy znak równości stosuje wartość do zmiennej i nigdy nie ocenia równości.

var x = 8;

var y = 8;

x == y; // true

Jest to wolny typ równości i zwróci "true" nawet jeśli zamiast liczby użyty zostanie łańcuch znaków.

var x = 8;

var y = "8";

x == y; // true

Trzy znaki równości (===) oznaczają ścisłą równość w JS.

var x = 8;

var y = 8;

x == y; // true

Jest to częściej używana i dokładniejsza forma definicji równości niż normalna funkcja "equal (==)", ponieważ wymaga, aby typ i wartość zwracały wartość true.

var x = 8;

var y = "8";

x == y; // false

Wykrzyknik, po którym następuje znak równości (!=), oznacza, że nie jest równy w JS. Jest to dokładne przeciwieństwo "==" i sprawdza tylko wartość, a nie typ.

var x = 50;

var y = 50;

x != y; // false

Wykrzyknik, po którym następują dwa znaki równości (!==), czyli ściśle nie równa się. Jest to dokładne przeciwieństwo (===) i sprawdza zarówno wartość jak i typ. Kolejny znany symbol, mniej niż (<), sprawdzi czy wartość po lewej jest mniejsza od wartości po prawej. Mniejsza lub równa (<=) - to samo co powyżej, ale będzie również równe "true". Większe niż (>) sprawdzi, czy wartość po lewej jest większa od wartości po prawej. Wartość większa lub równa (>=), to samo co powyżej, ale będzie to również prawda.

Funkcje

Dynamiczne sprawdzanie typu

Typy danych i zmiennych w JavaScript to podstawa języka programowania. Wiele błędów wykonawczych w JS jest typu. Na przykład, gdy próbujesz pomnożyć "liczbę" przez "ciąg znaków", otrzymujesz błąd "Not a Number" zwrócony. Czasami podczas wywoływania funkcji i uzyskać błąd "undefined nie jest funkcją", dzieje się tak, gdy próbuje uzyskać dostęp do właściwości, która nie jest zdefiniowana. Ponieważ JS nie może znaleźć tej właściwości, zwraca jej domyślną wartość jako niezdefiniowaną. Inne powszechny błąd, związane z typem podczas próby zmiany lub dostępu do właściwości z wartości, która jest zerowa lub niezdefiniowana. Nie ma konstruktorów takich jak Undefined czy Null.

Dynamiczne sprawdzanie typów

System typów JS pomaga uniknąć tych powszechnych błędów. Z definicji jest to język interpretowany i dynamiczny, i wymaga systemu typów do pracy w czasie biegu. Język próbuje również pomóc poprzez cichą konwersję typów wartości. Zmiana typu lub wymuszenie jest powodem, dla którego wielu programistów przechodzi na ścisłe użycie(==), aby sprawdzić równość wartości.

Dynamiczne sprawdzanie typów danych w JavaScript odbywa się za pomocą biblioteki TypeRight. Wśród innych cech, przyjmuje podejście polegające na implementacji następujących pseudoklas, których jedynym celem jest bycie prawą stroną deklaracji instanceof:

  • PrimitiveUndefined.
  • PrimitiveNull.
  • PrimitiveBoolean.
  • PrimitiveNumber.
  • PrimitiveString.
  • PrimitiveSymbol.

TypeRight nie oferuje obecnie do testu czy wartość jest obiektem, ale można ją łatwo dodać.

Zmienne pojemniki

Zmienne w JS są kontenerami, które zawierają dane wielokrotnego użytku. Przed ES2015 zmienne w JavaScript były deklarowane wyłącznie za pomocą słowa kluczowego var:

  • var x;
  • var y;
  • var z;

Dziś zmienne są definiowane przez typy var, let i const. Są one na swój sposób wyjątkowe i służą poprawieniu rozwoju kodu, ale zaleca się stosowanie: let - jeśli to możliwe oraz const - zawsze, gdy wartość zmiennej musi pozostać stała. Używanie zmiennych do przechowywania danych jest sercem języka i składa się z trzech części.

Deklaracja zmiennej - tutaj zmienna jest rejestrowana w odpowiednim zakresie. Przykłady deklaracji zmiennych:

  • var x;
  • var cup;
  • samochód.

Inicjalizacja następuje w momencie zadeklarowania zmiennej. Tutaj jest przydzielana pamięć lub miejsce za pomocą silnika JavaScript. Z tego powodu, gdy zmienna jest zadeklarowana, przyjmuje wartość undefined nawet przed przypisaniem.

Przypisanie zmiennej jest najważniejszym krokiem podczas używania. Tutaj dane są przypisywane do zmiennej, która jest wartością za pomocą operatora przypisania "=".

Wartości w JavaScript przyjmują jeden ze standardowych typów danych:

  • sznurek;
  • numer;
  • logiczne;
  • zero;
  • nieokreślony.

Składnia do przypisywania typów jest widoczna powyżej tylko w przypadku łańcuchów, które mają pojedyncze lub podwójne cudzysłowy. Również wartości boolean mogą być prawdziwe lub fałszywe. Przy nadawaniu nazw zmiennym w JavaScript należy przestrzegać pewnych zasad, tj

  1. Nazwy muszą zaczynać się od małej litery.
  2. Nazwy nie mogą zawierać symboli ani zaczynać się od symboli.
  3. Nazwy nie mogą zaczynać się od cyfry.
  4. Nazwy mogą zawierać kombinację wielkich liter, małych liter i cyfr.
Zmienne pojemniki

Sposób inicjalizacji JS

Zmienna jest inicjalizowana, gdy jej zawartość lub wartość jest ustawiona po raz pierwszy. Na przykład cena = 22.55 - może to być sposób na inicjalizację zmiennej. Może być zadeklarowany i zainicjowany w tym samym czasie. Na przykład, możesz napisać zmienną "cena = 22,55", z którym zmienna jest zadeklarowana i zainicjowana w tej samej linii. JS nie wymaga zadeklarowania typu zmiennej, a nawet pozwala, aby zmienna przechowywała zawartość różnych typów w różnym czasie. Na przykład możesz użyć "cena = 22,55", i w późniejszym czasie napisać cenę = "bardzo drogo". Jest to coś, co spowodowałoby błędy w innych językach, ale jest akceptowane przez JavaScript.

Sposoby inicjalizacji JS

JS pozwala na użycie zmiennej bez jej deklarowania. W wielu języki programowania konieczne jest zadeklarowanie zmiennej, zanim będzie można jej użyć, ale JS nie zobowiązuje. Kiedy język znajduje zmienną, która nie jest zadeklarowana, automatycznie tworzy ją i pozwala na jej użycie.

Nieprawidłowe użycie słowa kluczowego var może doprowadzić do błędu, który spowoduje, że JS przestanie działać, czyli strona internetowa nie będzie się poprawnie wyświetlać. var służy tylko do zadeklarowania zmiennej, nie można go użyć do niczego innego. Po zadeklarowaniu zmiennej, będzie ona używana bez poprzedzającego ją słowa kluczowego var. Jeśli zmienna jest już zadeklarowana, JavaScript spróbuje kontynuować i pobrać ją.

Demonstracja działania

Aby zademonstrować działanie kodu i wzmocnić podstawowe pojęcia dotyczące typów danych w języku JavaScript, program odczytuje kod pokazany na rysunku i zapisany w pliku o rozszerzeniu html.

Typ Demo

Po wyrenderowaniu wyniku, upewnij się, że strona jest renderowana normalnie, tzn. JavaScript jest wykonywany normalnie, oraz oczekiwany wynik powinien wykazać co następuje:

  1. Cena zmienna ważna: nieokreślona (akceptacja).
  2. Zmienna data1 jest ważna: null (akceptacja).
  3. Cena zmienna ważna: 32,55 (akceptacja).
  4. Cena podwójna: 65,1 (weź).
  5. Suma uzyskana z pomnożenia ceny przez ilość wynosi: 325,5 (akceptacja).
  6. Zmienna cena teraz: bardzo drogo (zaakceptować).
  7. Podwójna cena teraz: NaN (zaakceptuj).
  8. Zmienna cena została zadeklarowana po raz drugi i jest teraz ważna: 99,55 (akceptuj).
  9. Zmienna $ discount_applied: 0.55 (akceptacja).
Praca demonstracyjna

Zrozumienie, jak działa język, automatycznie uczyni dewelopera lepszym programistą. Ale biorąc pod uwagę, że "praktyka czyni mistrza", nie wystarczy nauczyć się teorii, ważne jest, aby zacząć stosować podstawy bazy danych JavaScript i funkcjonowania danych w praktyce. Po przeczytaniu powyższych informacji, nie powinno być trudne dla początkującego programisty odpowiedzieć na pytanie, ile typów danych jest w JavaScript.

Artykuły na ten temat