Skinnysite.net

... un modo di esprimersi.

Font Size

Cpanel

Homa Page di Daniele Franceschini

Oggetti involucro e tipi primitivi

Valutazione attuale:  / 0
ScarsoOttimo 

Un esempio utile alla comprensione di questo aspetto di javascript sono le stringhe in quanto sono considerate un tipo primitivo ma spesso vengono utilizzate come fossero oggetti. Un esempio può chiarire le cose:

var s; //tipo primitivo
s = "questa è una stringa"; //assegnazione di un valore alla variabile
var i;
i = s.length; //s in questo caso sembra un oggetto e non un tipo primitivo in quanto
lenght è una proprietà di un oggetto
var sub_s;
sub_s = s.substring(0,8) //anche in questo caso la variabile s si comporta come un
oggetto in quanto usa un metodo che si chiama substring

Pertanto a questo punto sarebbe lecito chiedersi: "in javascript le stringhe sono oggetti o sono tipi primitivi?"

La verità ce la fornisce l'operatore typeof che ci dice che le stringhe sono di tipo "string" e non "object", ma allora se non sono oggetti perché usano la notazione puntata tipica degli oggetti?

In realtà c'è un'ulteriore verità che deve essere ancora svelata ossia che ogni tipo primitivo ha una propria classe di oggetti. Sorpresa! Questo significa che javascript oltre ha supportare i tipi primitivi numero, stringa e booleno supporta anche le classi Number, String e Boolean.

Queste classi sono involucri detti anche "wrapper" di tipi primitivi. Ogni involucro ha al suo interno lo stesso valore del tipo primitivo ma definisce proprietà e metodi per poter manipolarlo. Quindi quando si usa su una stringa la chiamata della proprietà length, javascript crea automaticamente un oggetto String su cui applica il metodo length e così tutto funziona.

Va aggiunto che gli oggetti che vengono creati automaticamente da javascript sono temporanei e vengono gestiti dal sistema non appena diventano inutili.

Se questa cosa non vi piace perché potreste pensare che forse diminuisce le prestazioni del vostro script, potete sempre definire un oggetto String in questo modo:

var S = new String("questa è una stringa");

In questo modo siamo sicuri che siamo noi a farci un oggetto di tipo string senza che javascript faccia niente per noi, siamo tipi tosti ci facciamo tutto da soli, siamo noi ad avere il controllo.

Però stiamo attenti a non scrive poi una cosa di questo tipo:

var message;
message = S + "?";

altrimenti javascript farà per noi la conversione dell'oggetto String in una stringa temporanea su cui poi eseguirà l'operazione di concatenazione.

E' vero che siamo forti ma chi scrive gli interpreti è più forte di noi.

Sei qui: Home Code Snippets Javascript Oggetti involucro e tipi primitivi