w3schools entre diferencias diferencia javascript node.js const immutability

entre - Const en javascript? Cuándo usarlo y si es necesario.



let javascript w3schools (15)

Recientemente he encontrado la palabra clave const en javascript. Por lo que puedo decir, se usa para crear variables inmutables , y lo he probado para garantizar que no se pueda redefinir (en node.js):

const x = ''const''; const x = ''not-const''; // Will give an error: ''constant ''x'' has already been defined''

Me doy cuenta de que aún no está estandarizado en todos los navegadores, pero solo me interesa el contexto de node.js / v8, y he notado que ciertos desarrolladores / proyectos parecen favorecerlo mucho cuando se puede usar la palabra clave var para el mismo efecto.

Preguntas ?

¿Cuándo es apropiado usar const en lugar de var ?

¿Debe usarse cada vez que se declara una variable que no va a ser re-asignada?

¿Realmente hace alguna diferencia si var se usa en lugar de const o viceversa?



En mi experiencia, uso const cuando quiero configurar algo que deseo cambiar más adelante sin tener que buscar el código en busca de bits codificados, por ejemplo, una ruta de archivo o un nombre de servidor.

El error en tu prueba es otra cosa, sin embargo, estás tratando de hacer otra variable llamada x, esta sería una prueba más precisa.

const x = ''const''; x = ''not-const'';


Hay dos aspectos de sus preguntas: ¿cuáles son los aspectos técnicos del uso de const lugar de var y cuáles son los aspectos relacionados con el ser humano al hacerlo?

La diferencia técnica es significativa. En los lenguajes compilados, una constante se reemplazará en tiempo de compilación y su uso permitirá otras optimizaciones como la eliminación del código muerto para aumentar aún más la eficiencia del código en tiempo de ejecución. Los motores de JavaScript recientes (términos muy poco utilizados) compilan realmente el código JS para obtener un mejor rendimiento, por lo que el uso de la palabra clave const les informará de que las optimizaciones descritas anteriormente son posibles y deben hacerse. Esto se traduce en un mejor rendimiento.

El aspecto relacionado con el ser humano tiene que ver con la semántica de la palabra clave. Una variable es una estructura de datos que contiene información que se espera que cambie. Una constante es una estructura de datos que contiene información que nunca cambiará. Si hay espacio para el error, siempre se debe utilizar var . Sin embargo, no toda la información que nunca cambia en la vida útil de un programa debe declararse con const . Si en diferentes circunstancias la información debería cambiar, use var para indicar que, incluso si el cambio real no aparece en su código.


La preferencia personal realmente. Podría usar const cuando, como usted dice, no se volverá a asignar y es constante. Por ejemplo si quisieras asignar tu cumpleaños. Tu cumpleaños nunca cambia para que puedas usarlo como una constante. Pero tu edad sí cambia, por lo que podría ser una variable.


No soy un experto en el negocio de compilación JS, pero tiene sentido decir que v8 hace uso de la bandera const.

Normalmente, después de declarar y cambiar un grupo de variables, la memoria se fragmenta y v8 se detiene para ejecutarse, hace una pausa de unos pocos segundos para hacer gc o recolección de basura.

Si se declara una variable con const v8, puede confiar en colocarla en un contenedor de tamaño fijo ajustado entre otras variables const, ya que nunca cambiará. También puede guardar las operaciones adecuadas para esos tipos de datos ya que el tipo no cambiará.


Para integrar las respuestas anteriores, existe una ventaja obvia al declarar variables constantes, aparte de la razón de rendimiento: si accidentalmente intenta cambiarlas o declararlas de nuevo en el código, el programa no cambiará el valor o lanzará un error respectivamente.

Por ejemplo, compara:

// Will output ''SECRET'' const x = ''SECRET'' if (x = ''ANOTHER_SECRET'') { // Warning! assigning a value variable in an if condition console.log (x) }

con:

// Will output ''ANOTHER_SECRET'' var y = ''SECRET'' if (y = ''ANOTHER_SECRET'') { console.log (y) }

o

// Will throw TypeError: const ''x'' has already been declared const x = "SECRET" /* complex code */ var x = 0

con

// Will reassign y and cause trouble var y = "SECRET" /* complex code */ var y = 0


Por qué usar const , la respuesta de @Tibos es genial.

Pero tu dijiste:

Por lo que puedo decir, se utiliza para crear variables inmutables.

Eso es incorrecto Mutar una variable es diferente de reasignar:

var hello = ''world'' // assigning hello = ''bonjour!'' // reassigning

Con const, no puedes hacer eso:

const hello = ''world'' hello = ''bonjour!'' // error

Pero puedes mutar tu variable:

const marks = [92, 83] marks.push(95) console.log(marks) // [92, 83, 95] -> the variable has been mutated.

Por lo tanto, cualquier proceso que cambie el valor de la variable sin usar el signo = está silenciado.

Nota: += por ejemplo es ... reasignar!

var a = 5 a += 2 // is the same as a = a + 2

Por lo tanto, la conclusión es: const no le impide mutar variables, le impide reasignarlos .


Primero, tres cosas útiles sobre const (además de las mejoras de alcance que comparte con let ):

  • Se documenta para las personas que lean el código más adelante que el valor no debe cambiar.
  • Le impide a usted (oa cualquiera que lo persiga) cambiar el valor a menos que regresen y cambien la declaración intencionalmente.
  • Podría guardar algún análisis del motor de JavaScript en términos de optimización. Por ejemplo, ha declarado que el valor no puede cambiar, por lo que el motor no tiene que trabajar para determinar si el valor cambia para que pueda decidir si optimizar basándose en el valor que no cambia.

Tus preguntas:

¿Cuándo es apropiado usar const en lugar de var ?

Puede hacerlo cada vez que declare una variable cuyo valor nunca cambia. Si considera que es apropiado, depende totalmente de su preferencia / preferencia de su equipo.

¿Debe usarse cada vez que se declara una variable que no va a ser re-asignada?

Eso depende de usted / su equipo.

¿Realmente hace alguna diferencia si var is used in place of const` o viceversa?

Sí:

  • var y const tienen diferentes reglas de alcance. (Es posible que haya deseado comparar con let lugar de var .) Específicamente: const y let tienen un ámbito de bloque y, cuando se usan en el ámbito global, no crean propiedades en el objeto global (aunque sí crean globales). var tiene un alcance global (cuando se usa en un alcance global) o un alcance de función (incluso si se usa en un bloque), y cuando se usa en un alcance global, crea una propiedad en el objeto global.
  • Vea mis "tres cosas útiles" más arriba, todas se aplican a esta pregunta.

Proporciona: 1) una referencia constante, por ejemplo, const x = []: la matriz se puede modificar, pero x no puede apuntar a otra matriz; y 2) bloqueo del alcance. const y let juntos reemplazarán var en ecma6 / 2015 Vea la discusión en https://strongloop.com/strongblog/es6-variable-declarations/


Resumen:

const crea un enlace inmutable, lo que significa que el identificador de la variable const no es reasignable.

const a = "value1";

no puedes reasignarlo con

a = "value2";

Sin embargo, si const identifier contiene un objeto o una matriz, su valor puede cambiarse en la medida en que no lo estemos reasignando.

const x = { a: 1 } x.a = 2; //is possible and allowed const numbers = [1, 2]; numbers.push(3); //is possible and allowed

Tenga en cuenta que const es un ámbito de bloque al igual que let que no es el mismo que var (que tiene un alcance de función)

En resumen, cuando no es probable que algo cambie a través de la reasignación, use const o use let o var dependiendo del alcance que le gustaría tener.

Es mucho más fácil razonar sobre el código cuando está totalmente claro qué se puede cambiar a través de la reasignación y qué no puede ser. Cambiar una constante a un let es muerto simple. Y el ir por constante te hace pensar dos veces antes de hacerlo. Y esto es en muchos casos algo bueno.


Tienes buenas respuestas, pero seamos sencillos.

const debe usar const cuando se tiene una constante definida (lea como: no cambiará durante la ejecución de su programa).

Por ejemplo:

const pi = 3.1415926535

Si piensa que es algo que puede cambiarse en una ejecución posterior, use una var .

La diferencia práctica, basada en el ejemplo, es que con const siempre supondrá que pi será 3.14, es un hecho.

Si lo define como una var , puede ser 3.14 [...] o no.

Para una respuesta más técnica, @Tibos tiene razón académica.


const no es inmutable.

Desde el const :

La declaración const crea una referencia de solo lectura a un valor. No significa que el valor que tiene es inmutable, solo que el identificador de la variable no se puede reasignar.


Actualización 2017

Esta respuesta todavía recibe mucha atención. Vale la pena señalar que esta respuesta se publicó a principios de 2014 y que muchas cosas han cambiado desde entonces. ecmascript-6 es ahora la norma. Todos los navegadores modernos ahora admiten const por lo que debería ser bastante seguro de usar sin ningún problema.

Respuesta original de 2014

A pesar de tener un soporte de navegador bastante decente , evitaría usarlo por ahora. Del const :

La implementación actual de const es una extensión específica de Mozilla y no es parte de ECMAScript 5. Se admite 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. No es compatible con Internet Explorer 6-10, pero está incluido en Internet Explorer 11. La palabra clave const declara actualmente la constante en el alcance de la función (como variables declaradas con var).

Luego continúa diciendo:

const será definido por ECMAScript 6, pero con diferentes semánticas. Al igual que las variables declaradas con la instrucción let, las constantes declaradas con const serán de ámbito de bloque.

Si utiliza const , tendrá que agregar una solución alternativa para admitir navegadores un poco más antiguos.


var : declarar una variable, inicialización de valores opcional.

let : Declarar una variable local con alcance de bloque.

const : Declara una constante nombrada de solo lectura.

Ex:

var a; a = 1; a = 2;//re-initialize possible var a = 3;//re-declare console.log(a);//3 let b; b = 5; b = 6;//re-initiliaze possible // let b = 7; //re-declare not possible console.log(b); // const c; // c = 9; //initialization and declaration at same place const c = 9; // const c = 9;// re-declare and initialization is not possible console.log(c);//9 // NOTE: Constants can be declared with uppercase or lowercase, but a common // convention is to use all-uppercase letters.


Main point is that how to decide which one identifier should be used during development. In java-script here are three identifiers. 1. var (Can re-declared & re-initialize) 2. const (Can''t re-declared & re-initialize, can update array values by using push) 3. let (Can re-initialize but can''t re-declare)

''var'': en el momento de codificar cuando hablamos de código estándar, usualmente usamos el nombre del identificador, el cual es fácil de entender por otro usuario / desarrollador. Por ejemplo, si estamos trabajando en muchas funciones, usamos algunas entradas y procesamos esto y devolvemos algún resultado, como:

**Example of variable use** function firstFunction(input1,input2) { var process = input1 + 2; var result = process - input2; return result; } function otherFunction(input1,input2) { var process = input1 + 8; var result = process * input2; return result; }

En los ejemplos anteriores, ambas funciones producen resultados de 2 diferentes pero usan el mismo nombre de variables. Aquí podemos ver ''proceso'' y ''resultado'', ambos se utilizan como variables y deberían ser.

**Example of constant with variable** const tax = 10; const pi = 3.1415926535; function firstFunction(input1,input2) { var process = input1 + 2; var result = process - input2; result = (result * tax)/100; return result; } function otherFunction(input1,input2) { var process = input1 + 8; var result = process * input2 * pi; return result; }

Antes de usar ''let'' en java-script, tenemos que agregar ''use strict'' en la parte superior del archivo js

**Example of let with constant & variable** const tax = 10; const pi = 3.1415926535; let trackExecution = ''''; function firstFunction(input1,input2) { trackExecution += ''On firstFunction''; var process = input1 + 2; var result = process - input2; result = (result * tax)/100; return result; } function otherFunction(input1,input2) { trackExecution += ''On otherFunction''; # can add current time var process = input1 + 8; var result = process * input2 * pi; return result; } firstFunction(); otherFunction(); console.log(trackExecution);

En el ejemplo anterior, puede rastrear qué función se ejecutó cuando & cuál función no se usó durante una acción específica.