2011-11-23 20 views
7

Provengo dallo sfondo C# in cui è possibile ottenere immutabile con proprietà get pubbliche, set privato. Ho letto che i numeri in JavaScript sono immutabili così come posso fare quanto seguenumeri javascript immutabili

var x = 6/2; 
console.log(x); // 3 
x = 8; 
console.log(x); // 8 

ho cambiato x, che ho pensato che non poteva?

+2

stringhe sono immutabili in C#. 'var str =" hi "; str = "world"; 'Ora' str' ora è uguale a '" world "' cosa è successo? – asawyer

+1

Se i numeri fossero mutabili, potreste avere 'y = x', modificare' x' e 'x === y' sarebbe ancora vero. Ma non puoi. Ovviamente puoi sempre cambiare a cosa si riferisce 'x'. –

+3

"public get, private set" ha poco a che fare con l'immutabilità. Se è immutabile, non c'è "set". – delnan

risposta

19

I numeri stessi sono immutabili. I riferimenti a loro che sono memorizzati nella variabile non lo sono.

Così 6/2 si ottiene un riferimento al immutabili 3, e poi = 8 assegna un nuovo riferimento alla immutabili 8.

+7

E nessuno di questi è specifico per JS. Si applica praticamente a tutte le lingue, incluso C#. – delnan

1

C# consente inoltre un programmatore di creare un oggetto che non può essere modificato dopo la costruzione (oggetti immutabili). Se assegni un nuovo oggetto in C# a un oggetto immutabile, ad esempio una stringa. Stai ricevendo una nuova stringa piuttosto che modificare l'originale.

Quello che ha dimostrato qui non è poi così diverso. Si può provare un const invece

const x = 6/2; 
console.log(x); // 3 
x = 8; 
console.log(x); // 3 

Reference

Sintassi

const varname1 = valore1 [, varname2 = valore2 [, varname3 = value3 [, ... [, varnameN = valueN]]]];

compatibilità del browser

L'implementazione corrente di const è un'estensione per Mozilla specifico e non fa parte di ECMAScript 5. E 'supportato in Firefox Chrome & (V8). A partire da Safari 5.1.7 e Opera 12.00, se si definisce una variabile con in questi browser, è comunque possibile modificarne il valore in seguito. E non è supportata in Internet Explorer 6-9, o nell'anteprima di Internet Explorer 10. La parola chiave const attualmente dichiara la costante del perimetro funzione (come le variabili dichiarate con var).

+0

Questo non è un codice JavaScript valido. Non è valido nemmeno C# (manca un tipo per 'x'). E nessuna lingua accetta questo frammento nella sua interezza e restituisce ciò che i commenti indicano. Cosa stai cercando di mostrare? Inoltre, la tua spiegazione sembra confondere gli oggetti con le variabili - per favore fai in modo che la tua spiegazione attuale sia * molto * confusa! – delnan

+0

Il mio punto è che entrambi i risultati sono possibili in JavaScript. Certo, non è corretto ECMAScript. Dimmi quale implementazione web segue le specifiche degli standard per la "T"? archiviazione offline, javascript, html, browser? no, no, no, no. Come sviluppatori del web dobbiamo pensare fuori dagli schemi. Utilizzare la tecnologia appropriata in base agli strumenti supportati e all'ambiente. –

+1

Sarò in grassetto e dirò che nessuna implementazione (rilevante) di JavaScript è * quella * rotta. Non esiste una parola chiave 'const' e nessun altro modo per saltare in silenzio (!) I successivi compiti. O puoi fornire un riferimento per una cosa del genere? -1 come presumo che tu stia parlando di BS e stai sbuffando quando ci si confronta con esso. – delnan