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