2011-11-23 19 views
7

Vengo de C# background donde inmutable se logra con public get, private set properties. He leído que los números en javascript son inmutables por lo que ¿cómo puedo hacer la siguientejavascript numbers- inmutable

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

He cambiado x, que pensé que no podía?

+2

Las cadenas son inmutables en C#. 'var str =" hola "; str = "mundo"; 'Ahora' str' ahora es igual a '" mundo "' ¿qué pasó? – asawyer

+1

Si los números fueran mutables, podría tener 'y = x', modificar' x' y 'x === y' seguiría siendo cierto. Pero no puedes. Por supuesto, siempre puedes cambiar a qué se refiere 'x'. –

+3

"public get, private set" tiene poco que ver con la inmutabilidad. Si es inmutable, no hay 'conjunto '. – delnan

Respuesta

19

Los números en sí mismos son inmutables. Las referencias a ellos que se almacenan en la variable no lo son.

Así 6/2 se obtiene una referencia a lo inmutable 3, y luego = 8 asigna una nueva referencia a lo inmutable 8.

+7

Y nada de eso es específico de JS. Se aplica a casi todos los idiomas, incluido C#. – delnan

1

C# también permite que un programador cree un objeto que no se puede modificar después de la construcción (objetos inmutables). Si asigna un objeto nuevo en C# a un objeto inmutable, por ejemplo, una cadena. Obtendrá una nueva cadena en lugar de modificar el original.

Lo que ha demostrado aquí no es tan diferente. Usted puede tratar de una sintaxis const lugar

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

Reference

const varname1 = valor1 [, varname2 = valor2 [, varname3 = valor3 [, ... [, varnameN = valorN]]]];

Compatibilidad del navegador

La implementación actual de const es una extensión de Mozilla-específica y no es parte de ECMAScript 5. Se apoya en Firefox Chrome & (V8). A partir de Safari 5.1.7 y Opera 12.00, si define una variable con const en estos navegadores, aún puede cambiar su valor más adelante. Es no es compatible con Internet Explorer 6-9, o en la vista previa de Internet Explorer 10. La palabra clave const declara actualmente la constante en el ámbito de la función (como las variables declaradas con var).

+0

Eso ni siquiera es JavaScript válido. Tampoco es válido C# (sin un tipo para 'x'). Y ninguno de los dos idiomas acepta ese fragmento en su totalidad y muestra lo que indican los comentarios. ¿Qué estás tratando de mostrar? Además, tu explicación parece confundir objetos con variables. Por favor, entiéndelo, tu explicación actual es * muy * confusa. – delnan

+0

Mi punto es que ambos resultados son posibles en JavaScript. Claro, no es ECMAScript directo. ¿Dime qué implementación web sigue las especificaciones de las normas para la "T"? almacenamiento fuera de línea, javascript, html, navegadores? no no no no. Como desarrolladores web, tenemos que pensar fuera de la caja. Use la tecnología apropiada según las herramientas compatibles y el entorno. –

+1

Seré audaz y diré que ninguna implementación de JavaScript (relevante) está * que * rota. No existe la palabra clave 'const' ni ninguna otra forma de omitir (!) Las asignaciones subsiguientes en silencio. ¿O puede proporcionar una referencia para tal cosa? -1, ya que tengo que asumir que estás hablando BS y dando vueltas por el monte cuando te enfrentas a él. – delnan