Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 20 di 112
  • livello avanzato
Indice lezioni

Object, oggetti, riferimenti e tipi primitivi

Differenze tra tipi primitivi e oggetti in JavaScript, cos'è l'oggetto Object e come utilizzare la parola chiave 'new'.
Differenze tra tipi primitivi e oggetti in JavaScript, cos'è l'oggetto Object e come utilizzare la parola chiave 'new'.
Link copiato negli appunti

C'è una sostanziale differenza tra gli oggetti e i cinque tipi di dato primitivi di JavaScript nei confronti dell'assegnamento alle variabili:

  • I tipi di dato primitivi
  • Gli oggetti riferimento

Vediamo l'implicazione di questa osservazione con un esempio. Consideriamo il seguente codice:

var x = 10;
var y = x;

y = y + 1;

In esso definiamo la variabile x 10 y x y x 10 y 11 y x

Consideriamo un esempio analogo sugli oggetti:

var persona = {nome: "Mario", cognome: "Rossi"};
var altraPersona = persona;  

altraPersona.nome = "Giuseppe";

In questo caso se proviamo ad accedere alla proprietà nome persona Giuseppe persona altraPersona persona altraPersona

Questo è un aspetto molto importante da tenere presente quando si lavora con gli oggetti, in particolar modo nel passaggio di valori agli argomenti delle funzioni.

Passaggio di variabili alle funzioni: per valore o per riferimento

Infatti il meccanismo del passaggio di valori alle funzioni adotta lo stesso approccio dell'assegnamento alle variabili. In pratica, parlando in termini tecnici, il passaggio di valori relativi a tipi di dato primitivi avviene sempre per valore mentre il passaggio di oggetti avviene sempre per riferimento.

Approfondiremo più avanti aspetti avanzati degli oggetti in JavaScript.

Object

Come abbiamo visto, il supporto di JavaScript per la creazione di oggetti è molto flessibile ed abbastanza immediato. Ma oltre a consentirci di definire ed utilizzare gli oggetti che servono alla nostra applicazione, JavaScript ci mette a disposizione diversi oggetti predefiniti che risultano molto comodi per le più comuni attività di programmazione.

Il primo di questi oggetti che prendiamo in considerazione è Object. Anche se a prima vista può sembrare strano avere un oggetto con questo nome, vedremo come esso sia fondamentale per tutti gli oggetti di JavaScript.

In pratica ogni oggetto, predefinito o meno che sia, è costruito su Object in base ad un meccanismo che approfondiremo più avanti. Questo fa sì che tutti gli oggetti JavaScript abbiano alcune caratteristiche comuni.

Negli esempi di creazione degli oggetti che abbiamo visto finora ci siamo basati sulla loro rappresentazione letterale:

var persona = { nome: "Mario", cognome: "Rossi"};

oppure

var persona = {}; 
persona.nome = "Mario";
persona.cognome = "Rossi";

Possiamo ottenere lo stesso risultato utilizzando direttamente l'oggetto Object:

var persona = new Object(); 

persona.nome = "Mario";
persona.cognome = "Rossi";

In questo caso utilizziamo l'operatore new

Object e new

L'oggetto Object è anche in grado di generare istanze di oggetti a partire da una qualunque espressione JavaScript, come mostrato dal seguente codice:

var numero      = new Object(12);
var altroNumero = new Object(3*2);
var stringa     = new Object("test");
var persona     = new Object({nome: "Mario", cognome: "Rossi"});

A parte l'ultima istruzione che è equivalente alla creazione di un oggetto tramite la sua rappresentazione letterale, le prime tre istruzioni creano un oggetto a partire da un tipo di dato primitivo, come un numero o una stringa.

Il risultato ottenuto non è un semplice valore numerico o un valore di tipo stringa, ma oggetti specializzati nella manipolazione di valori numerici e stringhe. In particolare, per ogni tipo di dato primitivo, tranne null e undefined, esiste un corrispondente oggetto specializzato che mette a disposizione del programmatore specifiche proprietà e metodi.

ToString e ValueOf, metodi condivisi da tutti gli oggetti

Dal momento che tutti gli oggetti JavaScript sono basati su Object, essi condividono alcuni metodi, come ad esempio: toString() e valueOf().

Il primo metodo restituisce una versione in stringa dell'oggetto, come mostrato nel seguente esempio:

var x = new Object(32);
x.toString();            //restituisce "32"

Nel caso di oggetto non riconducibile ad un tipo di dato primitivo sarà restituita la stringa [object Object]

var persona = new Object({nome: "Mario", cognome: "Rossi"});
persona.toString();		//restituisce "[object Object]"

Il metodo valueOf()

var x = new Object(32);
x.valueOf();             //restituisce 32

Nel caso di oggetto non associato ad un tipo di dato primitivo viene restituito l'oggetto stesso.

È da sottolineare come JavaScript chiami implicitamente questi metodi quando è necessario effettuare delle conversioni o quando in un'espressione è richiesto il valore primitivo dell'oggetto.

Ti consigliamo anche