Pregunta ¿Hay constantes en JavaScript?


¿Hay alguna manera de usar constantes en JavaScript?

Si no, ¿cuál es la práctica común para especificar variables que se usan como constantes?


1061
2017-09-24 22:45


origen


Respuestas:


Ya que ES2015, JavaScript tiene una noción de const:

const MY_CONSTANT = "some-value";

Esto funcionará en prácticamente todos los navegadores excepto IE 8, 9 y 10. Algunos también pueden necesitar Modo estricto habilitado

Puedes usar var con convenciones como ALL_CAPS para mostrar que ciertos valores no deberían modificarse si necesita admitir navegadores más antiguos o si está trabajando con código heredado:

var MY_CONSTANT = "some-value";

965
2017-09-24 22:46



¿Estás tratando de proteger las variables contra la modificación? Si es así, entonces puedes usar un patrón de módulo:

var CONFIG = (function() {
     var private = {
         'MY_CONST': '1',
         'ANOTHER_CONST': '2'
     };

     return {
        get: function(name) { return private[name]; }
    };
})();

alert('MY_CONST: ' + CONFIG.get('MY_CONST'));  // 1

CONFIG.MY_CONST = '2';
alert('MY_CONST: ' + CONFIG.get('MY_CONST'));  // 1

CONFIG.private.MY_CONST = '2';                 // error
alert('MY_CONST: ' + CONFIG.get('MY_CONST'));  // 1

Usando este enfoque, los valores no pueden ser modificados. Pero, debes usar el método get () en CONFIG :(.

Si no necesita proteger estrictamente el valor de las variables, simplemente haga lo sugerido y use una convención de TODOS LOS MAYÚSCULAS.


304
2017-09-25 03:14



los const la palabra clave está en el borrador de ECMAScript 6 pero hasta ahora solo cuenta con un poco de soporte de navegador: http://kangax.github.io/compat-table/es6/. La sintaxis es:

const CONSTANT_NAME = 0;

118
2018-03-26 20:29



IE no admite constantes, tipo de, por ejemplo .:

<script language="VBScript">
 Const IE_CONST = True
</script>
<script type="text/javascript">
 if (typeof TEST_CONST == 'undefined') {
    const IE_CONST = false;
 }
 alert(IE_CONST);
</script>

63
2017-10-26 19:22



"use strict";

var constants = Object.freeze({
    "π": 3.141592653589793 ,
    "e": 2.718281828459045 ,
    "i": Math.sqrt(-1)
});

constants.π;        // -> 3.141592653589793
constants.π = 3;    // -> TypeError: Cannot assign to read only property 'π' …
constants.π;        // -> 3.141592653589793

delete constants.π; // -> TypeError: Unable to delete property.
constants.π;        // -> 3.141592653589793

Ver Object.freeze. Usted puede utilizar const si quieres hacer el constants referencia de solo lectura también.


63
2018-05-04 23:58



ECMAScript 5 introduce Object.defineProperty:

Object.defineProperty (window,'CONSTANT',{ value : 5, writable: false });

Sus compatible con todos los navegadores modernos (así como IE ≥ 9).

Ver también: Object.defineProperty en ES5?


56
2018-01-09 00:41



No, no en general. Implementos de Firefox const pero sé que IE no.


@John señala una práctica común de nombres para constras que se ha utilizado durante años en otros idiomas, no veo ninguna razón por la que no puedas usar eso. Por supuesto, eso no significa que alguien no escriba el valor de la variable de todos modos. :)


23
2017-09-24 22:45



Documentos web de Mozillas MDN contiene buenos ejemplos y explicaciones sobre const. Extracto:

// define MY_FAV as a constant and give it the value 7
const MY_FAV = 7;

// this will throw an error - Uncaught TypeError: Assignment to constant variable.
MY_FAV = 20;

Pero es triste que IE9 / 10 todavía no sea compatible const. Y la razón por la que es absurdo:

Entonces, ¿qué está haciendo IE9 con const? Asi que   Hasta ahora, nuestra decisión ha sido no   apoyarlo Todavía no es un consenso   función ya que nunca ha estado disponible   en todos los navegadores

...

Al final, parece ser el mejor   solución a largo plazo para la web es   dejarlo y esperar   procesos de estandarización para ejecutar sus   curso.

No lo implementan porque otros navegadores no lo implementaron correctamente? ¿Demasiado miedo de hacerlo mejor? Definiciones de estándares o no, una constante es una constante: establecida una vez, nunca cambiada.

Y a todas las ideas: todas las funciones se pueden sobrescribir (XSS, etc.). Entonces no hay diferencia en var o function(){return}. const es la única constante real.

Actualizar: IE11 apoyos  const:

IE11 incluye soporte para las características bien definidas y de uso común del estándar emergente ECMAScript 6 que incluye let, const, Map, Sety WeakMap, tanto como __proto__ para mejorar la interoperabilidad.


19
2018-04-30 09:57