Prymitywne typy danych
6 + 1 prymitywnych typów danych w JavaScript?
W ES6, czyli wersji JavaScript z 2015 roku, jest sześć prymitywnych typów danych:
-
undefined
, -
boolean
, -
number
, -
string
, -
bigint
, oraz -
symbol
.
Ponadto, specjalnym typem prymitywnym jest null
, czyli Rdzenna Strukturalna Wartość Prymitywna (ang. Structural Root Primitive).
Niezmienność (ang. immutability)
Wszystkie prymitywne typy danych w JavaScript są niezmienne.
Sprawdzanie typów
Aby sprawdzić jaki dana wartość ma typ używamy operatora typeof
.
typeof undefined === 'undefined' // => true
typeof true === 'boolean' // => true
typeof 1 === 'number' // => true
typeof '1' === 'string' // true
typeof BigInt(4242424242424242424242424242424) === 'bigint' // => true
typeof Symbol() === 'symbol' // => true
typeof null === 'object' // true
undefined
undefined
używane jest, aby wyrazić, że referowana wartość nie istnieje. Na przykład, zmienna, która została zadeklarowana, ale nie została przypisana do niej żadna wartość, ma wartość undefined
przypisaną automatycznie.
boolean
W JavaScript są dwa typy boolowskie (ang. boolean), czyli logiczne: true
oraz false
.
number
Typ danych number
może oznaczać zarówno liczbę całkowitą (ang. an integer), jak i liczbę zmiennoprzecinkową (ang. a floating-point number).
Zakres liczb całkowitych, które typ danych number
może reprezentować zaczyna się od -(2^53 − 1)
, a kończy na 2^53 − 1
. Aby sprawdzić czy dana liczba całkowita może być bezpiecznie reprezentowana przez typ danych number
można użyć metody Number.isSafeInteger()
. Natomiast, jeżeli dana liczba całkowita wykraczas poza podany zakres, to reprezentowana jest przez podwójnie precyzyjną (ang. double-precision) przybliżoną liczbę zmiennoprzecinkową. Problem ten rozwiązuje typ danych bigint
.
bigint
Typ danych bigint
może być użyty do reprezentoania liczb całkowitych z dowolną precyzją, która wybiega poza bezpieczny zakres typu danych number
. Typ danych bigint
tworzony jest poprzez dołączanie n
na końcu danej liczby całkowitej lub poprzez użycie konstruktora BigInt
.
typeof 9007199254740992n // => "bigint"
typeof BigInt(9007199254740992) // => "bigint"
string
W JavaScript typ danych string
, czyli ciąg (znaków), dedykowany jest reprezentowaniu danych tekstowych. W JavaScript string
to uporządkowany ciąg znaków (ang. characters), które z kolei są wizualną reprezentacją 16-bitowych liczb całkowitych bez znaku (ang. 16-bit unsigned integers). Indeks pierwszego znaku w danym string
'u to 0
.
Stringi w JavaScript są niezmienne (ang. immutable).
// `String.substr()` jest używane do uzyskania części stringa.
'abcdef'.substr(1,3) // => "bcd"
// W celu łączenia dwóch stringów używa się metody `String.concat()`.
'abc'.concat('def') // => "abcdef"
symbol
Prymitywny typ danych symbol
jest nowością wprowadzoną do JavaScript w wersji ES6 (aka ES2015). symbol
w JavaScript jest anonimową, unikalną wartością, identyfikatorem, który może być używany jako właściwość (ang. property) obiektu.
W celu utworzenia symbolu używa się konstruktora Symbol
, do którego można podać argument z opisem (ang. description). Utworzenie dwóch symboli z tym samym opisem nie oznacza, że oba symbole są sobie równoważne. Każdy symbol
w JavaScript jest unikalny.
Symbol('foo') === Symbol('foo') // => false
const symA = Symbol()
const symB = Symbol()
const anObj = {
[symA]: 1,
[symB]: 2
}
console.log(anObj) // {Symbol(): 1, Symbol(): 2}
anObj[symA] // => 1
anObj[symB] // => 2
Właściwości obiektów, które są symbolami, są ignorowane przez JSON.stringify
.
null
null
jest typem danych oznaczającym, że choć referowana wartość istnieje, to jest ona pustką (ang. emptiness). null
jest często używany jako wartość właściwości obiektów, które obecnie są puste (choć nie są undefined
), ale w przyszłości oczekuje się, że takie nie będą.
foo // Uncaught ReferenceError: foo is not defined
let foo // => undefined
foo = null // => null