# Tipuri de date

&#x20;În JavaScript, o valoare e întotdeauna de un anumit tip de date. În continuare vom vedea care sunt ele.

### **Undefined**

Undefined e un tip special de date care reprezintă conceptul unei valori care lipsește neintenționat. De exemplu, dacă o variabilă nu are setată o valoare, atunci tipul de date a variabilei este undefined.

```javascript
let bandersnatch;

console.log(bandersnatch); // undefined
```

### Null

Null e un tip special de date care reprezintă conceptul unei valori care lipsește intenționat. Null poate fi utilizat atunci când dorim să indicăm că valoarea lipsește sau e necunoscută.

```javascript
let mimsy = null;

console.log(mimsy); // null
```

### Boolean

Tipul de date boolean poate avea doar 2 valori: **true** sau **false**.

Acest tip de date este utilizat pentru stocarea valorilor de tip **da** sau **nu**.

```javascript
let isSad = true;

let isHappy = !isSad;               // The opposite
let isFeeling = isSad || isHappy;   // Is at least one of them true?
let isConfusing = isSad && isHappy; // Are both true?
```

### Number

Tipul de date number poate stoca atât numere întregi cât și numere reale.

```javascript
console.log(typeof(28));   // "number"
console.log(typeof(3.14)); // "number"
console.log(typeof(-140)); // "number"
```

Din tipul de date number fac parte și valorile numerice speciale **Infinity**, **-Infinity** și **NaN**.

**Infinity** reprezintă infinitatea matematică și este o valoare specială mai mare decât orice număr.\
**NaN** reprezintă o eroare de calcul, este rezultatul unei operații matematice incorecte sau nedeterminate.

```javascript
let scale = 0;

let a = 1 / scale;  // Infinity
let b = 0 / scale;  // NaN
let c = -a;         // -Infinity
let d = 1 / c;      // -0
```

**BigInt**

În JavaScript, tipul de date number nu poate reprezenta valori mai mari decât 9007199254740991 sau mai mici decât -9007199254740992. De asemenea ele nu sunt numere exacte. În majoritatea cazurilor aceste valori sunt deajuns, însă atunci când dorim valori mai mari sau mai mici, sau vrem numere intregi exacte, putem utiliza **BigInt**.

O variabilă sau constantă de tip **BigInt** are sufixul **n** după număr.

```javascript
let alot = 9007199254740991n;

console.log(typeof(alot)); // "bigint"
console.log(alot + 1n));   // 9007199254740992n
console.log(alot + 2n));   // 9007199254740993n
```

### String

Un șir de caractere are tipul de date string și se scrie între ghilimele. Pot fi declarate cu 3 tipuri de ghilimele, toate creaza acelasi tip de date - string.

```javascript
console.log(typeof("some text")); // "string"
console.log(typeof('some text')); // "string"
console.log(typeof(`some text`)); // "string"
```

Un string gol, este și el un string.

```javascript
console.log(typeof('')); // "string"
```

String-urile pot fi parte a unei expresii.

```javascript
console.log(101 + ' Dalmatians'); // "101 Dalmatians"
console.log('Hello' + ' World');  // "Hello World"
```

String-urile au o serie de metode (funcții interne) utile care ne ajută să le manipulăm ușor. Câteva exemple mai populare:

```javascript
let text = "Hello World";

// returneaza caracterul pe pozitia indicata ca parametru
let letter = text.charAt(0) // 'H'

// Intreaba daca string-ul incepe cu caracterele indicate ca parametru
text.startsWith("Hello"); // true

// Intreaba daca string-ul se termina cu caracterele indicate ca parametru
text.endsWith("WORLD"); // false (caracterele mici si mari sunt diferite in js)

// Returneaza textul cu toate caracterele transformate in "LITERE MARI"
text.toUpperCase(); // "HELLO WORLD"

// Returneaza textul cu toate caracterele transformate in "litere mici"
text.toLowerCase(); // "hello world"
```

Nimeni nu le ține minte pe toate deobicei, puteți întotdeauna să gasiți toate metodele string-ului în resurse externe, e.g:

W3Schools - <https://www.w3schools.com/jsref/jsref_obj_string.asp>

MDN - <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String>

### Symbol

Symbol este un tip de date special care este utilizat pentru crearea identificatorilor unici.

```javascript
let alohomora = Symbol()
console.log(typeof(alohomora)); // "symbol"
```

### Mai departe

În capitolul următor vom vedea operațiile principale care le putem avea cu aceste tipuri de date.

{% content-ref url="/pages/-M7Tu7YRy8yCfSPwQpSM" %}
[Operatori](/frontend-dinamic/javascript/operatori.md)
{% endcontent-ref %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://wiki.girlsgoit.md/frontend-dinamic/javascript/tipuri-de-date.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
