JavaScript - składnia, deklaracje i podstawowe typy danych oraz ich operatory
Opublikowano czw 09 kwietnia 2020 w javascript • 4 min read
W JavaScript istnieją dwa typy danych - proste/prymitywne i referencyjne, poniżej zostaną przedstawione te pierwsze. Typy referencyjne przechowywane są w pamięci podręcznej a zmienna jest do nich referencją.
Postawy i deklaracje
w JS instrukcje nazywane są wyrażeniami i rozdzielone są średnikiem ;
składnia komentarza
// jednoliniowy
*/ wielo -
liniowy
*/
Istnieją trzy typy deklaracji zmiennych
const
- podstawowa deklaracja, nie ulega zmianie, tylko do odczytu / zwany identyfikatoremlet
- deklaracja stosowana w przypadku gdy zmienna będzie musiała ulec zmianie, jest lokalna i ograniczona do bloku, w którym jest zawartavar
- wcześniej podstawowa zmienna (przed ES6), obecnie rzadziej stosowana (po wprowadzeniu const i let) więcej na ten temat tutaj lub poniżej.
var
vs let
-> 4 istotne różnice w:
1) zakresie (scope)
2) podnoszeniu (hoisting)
3) ponownej deklaracji (redeclaration)
4) tworzeniu globalnego obiektu (global object property)
let
w odróżnieniu od var
nie jest globalnie dostępny a przypisany do najbliższych funkcji etc. jest dostępny w sposób skryptowy (linia po linii, podobnie jak w pythonie), wartość mu przypisana może być zmieniona ale nie może zostać ponownie zadeklarowany, nie tworzy globalnie dostępnego obiektu.
słowo kluczowe | Zakres | Windowanie | Czy może być jej ponownie przypisana wartość | Czy może być ponownie zadeklarowana? |
---|---|---|---|---|
var |
Zakres funkcji | Tak | Tak | Tak |
let |
Zakres bloku | "nie" | Tak | nie |
const |
Zakres bloku | "nie" | nie | nie |
więcej na ten temat tutaj
Hoisting - "przenoszenie" zmiennych na sam początek kodu, do globalnego zasięgu lub zasięgu funkcji (więcej tutaj na ten temat)
Windowanie w przypadku let
i const
odbywa się, ale nie są one osiągalne do momentu, w którym ich deklaracja jest zewaluowana w trakcie uruchamiania programu (więcej na ten temat tutaj)
deklaracji dokonujemy poprzez użycie słowa kluczowego (let, const) + identyfikator (nazwy zmiennej np. foo lub fu etc.), oraz poprzez opcjonalne przypisanie jej wartości (np. 'bar')
let fu = "bar"
- zmienne nie mogą zaczynać się od cyfr
- wielkość liter na znaczenie
fu
to nie to samo coFu
- nazwa zmiennej nie może zawierać spacji, myślników, kropek - stosowany natomiast jest podkreślnik np. _fu
- nazwa zmiennej nie może być słowem kluczowym
Podstawowe typy danych
Do podstawowych (tzw. prymitywnych) typów danych wykorzystywanych w JS zaliczyć można:
- string - ciągi znaków tzw łańcuchowy (np. "ab2c ala" - wymaga cudzysłowu lub apostrofu)
- number - typ liczbowy (np. 123 - brak cudzysłowu)
- undefined - typ specjalny, niezainicjowana zmienna/nieistniejąca właściwość obiektu
- null - type specjalny, określa pustą wartość (wykorzystywany przy obiektach)
- boolean - typ logiczny (Prawda/Fałsz - True/False)
Typ łańcuchowy
Operator +
pozwala na dodanie treści do zadeklarowanego wcześniej łańcucha znaków
let droid = 'r2d2'
droid += '&c3po'
droid // r2d2&c3po
Można uzyskać wybrany znak z łańcuch po indeksie
let droid = 'r2d2'
droid[2] // d
droid.indexOf('r') // 0
::: (Template literals) istnieje również możliwość włączania wartości zmiennej w ciąg łańcucha znaków poprzez zamknięcie treście w `` + zastosowaniu $ i nawiasów klamrowych - w ten sposób można wstawiać również równania( zwraca wynik), jak i funkcje etc. :::
const droid = 'r2d2'
console.log(`to nie jest %{droid}, którego szukamy`)
lub:
console.log("to nie jest" + " " + droid + " którego szukamy")
wynik będzie ten sam:
>> `to nie jest r2d2, którego szukamy`
Przydatne kolokacje znaków (tzw. escaping) wykorzystanych w typie łańcuchowym
\n
- nowy wiersz
\r
- reset pozycji kursora i powrót na nową linię
\t
- tabulacja
\
- lewy ukośnik jest również wymagany przed \
, "
lub ` z racji tego, że są znakami specjalnymi dla JS -> np.
\"
- pozwala na łączenie ze sobą ciągów znaków przy pomocy operatora
+
:::Napisy szablonowe - osadzenie do w ramach łańcucha zmiennej wymaga zastosowanie znaku dolara nawiasów klamrowych oraz tylniego apostrofu String ${variable}
więcej na ten temat tutaj:::
const cat = "Deedee"
console.log(`kot ${cat}`)
> kot Deedee
::: metody łańcucha znaków String.formCharCode() - "Zwraca łańcuch znaków stworzony przez podaną sekwencję kodów Unicode.", String.fromCodePoint() - zwraca łańcuch stworzony na podstawie specyficznej sekwencji punktów kodu, String.raw() :::
Typ liczbowy
-
jeśli zaczyna się od zera tj traktowany jako wartość ósemkowa a od 0x jako szesnastkowa
-
może być zapisywana wartość w notacji wykładniczej "X.YeZ, gdzie X to część całkowita, Y część dziesiętna, natomiast Z to wykładnik potęgi liczby 10. Zapis taki oznacza to samo, co X.Y * 10Z" (źródło)
Przykładowe zastosowanie: 123, -123, 1.1, -1.1, 0.1E2, -0x0f
-
pozwala na przeprowadzanie stosowanie operatorów arytmetycznych ->
* + - /
-
operator
%
modulo dzieli z resztą -
operator
--
oraz++
dokonuje dekrementacji oraz inkrementacji/ zmniejszenia lub zwiększenia wartości o 1 (x--
lub--x
tj to samo cox = x -1
) -
pozwala również na stosowanie operatorów porównania (relacyjnych) np
<= < > >= !== === !=
oraz bitowych -
==
równy? -
===
równy tego samego typu? -
!==
nierówny?
Typ logiczny
- pozwala na stosowanie operatorów logicznych
&&
- and/i,||
- or/albo,!
- not/nie
typeof
w przypadku niepewności jakiego typ danych przechowuje dana zmienna istniej możliwość zastosowania operatora typeof
, który zwraca łańcuch zwierający typ tzw. operandu (argument operatora)
schemat: typeof operand
przykład1:
typeof 1
>> 'number'
przykład2:
const robot = 'r2d2'
typeof robot
>> 'string'
Zastosowanie z innymi typami danych:
typeof [1,2,3,4] // "object"
typeof {name:'John', age:34} // "object"
typeof new Date() // "object"
typeof function () {} // "function"
typeof myCar // "undefined"
Źródła:
https://launchschool.com/books/javascript/read/basics#datatypes
https://developer.mozilla.org/pl/docs/Web/JavaScript/Guide/Sk%C5%82adnia_i_typy
http://webmaster.helion.pl/index.php/kjs-cechy-jezyka/kjs-typy-danych
http://webmaster.helion.pl/index.php/kjs-cechy-jezyka/kjs-operatory/kjs-operatory-arytmeyczne
http://webmaster.helion.pl/index.php/kjs-cechy-jezyka/kjs-operatory/kjs-operatory-logiczne
http://kursjs.pl/kurs/super-podstawy/zmienne.php
https://medium.com/@larry.sassainsworth/let-vs-var-vs-const-in-javascript-8b898f868394
https://stackoverflow.com/questions/762011/whats-the-difference-between-using-let-and-var
https://www.youtube.com/watch?v=JFDScHg6Dws