¿Cómo declarar constantes de cadena en JavaScript? [duplicate]

5 minutos de lectura

avatar de usuario
girish chaudhari

Quiero declarar constantes de cadena en JavaScript.

¿Hay alguna manera de hacer eso?

  • no de la misma manera que en otros lenguajes como java, pero podría devolver una función que devuelva un valor. Ver stackoverflow.com/questions/130396/…

    – Nonágono Soluble

    20 de marzo de 2014 a las 20:58

avatar de usuario
Alex

Las implementaciones de muchos navegadores (y Node) tienen constantes, que se usan con const.

const SOME_VALUE = "Your string";

Este const significa que no puede reasignarlo a ningún otro valor.

Comprobar el notas de compatibilidad para ver si sus navegadores específicos son compatibles.

Alternativamente, también podría modificar el primer ejemplo, usando defineProperty() o sus amigos y hacer el writable propiedad false. Esto significará que el contenido de la variable no se puede cambiar, como una constante.

  • gran idea. Puede ahorrarse aún más algunas pulsaciones de teclas al no tener el '‘s alrededor de los nombres de propiedad, por ejemplo, = { constant1: 'value1',}

    –Ian Davis

    1 de marzo de 2013 a las 15:04

  • impresionante muchas gracias por esta respuesta. Iba a usar const, pero desafortunadamente aún admitimos usuarios con ie9 🙁 Sin embargo, una cosa extraña es que en la página de MDN dice que puede ser “descriptor de datos” o “descriptor de acceso”, pero no ambos … sin embargo, los ejemplos muestran ambos se usan (es decir, enumerable con escritura) luego en “defineProperties” no dice eso y le permite usar cualquiera … un poco confuso.

    – carinlynchin

    25 de marzo de 2016 a las 17:08

  • Además, es una buena práctica nombrar constantes en mayúsculas con guión bajo para indicar su uso especial. p.ej const SOME_VAR = "Your string";

    – Sven 31415

    7 abr 2016 a las 14:38


  • @ Sven31415 Buena idea, hice una edición.

    – Alex

    8 de abril de 2016 a las 7:24

¿Estás usando JQuery? ¿Desea utilizar las constantes en varios archivos javascript? Entonces sigue leyendo. (Esta es mi respuesta para una pregunta relacionada con JQuery)

Hay un práctico método jQuery llamado ‘getScript’. Asegúrese de utilizar la misma ruta relativa que usaría si accediera al archivo desde sus archivos html/jsp/etc (es decir, la ruta NO es relativa a donde coloca el método getScript, sino relativa a la ruta de su dominio). Por ejemplo, para una aplicación en localhost:8080/myDomain:

$(document).ready(function() {
  $.getScript('/myDomain/myScriptsDir/constants.js');
  ...

entonces, si tienes esto en un archivo llamado constants.js:

var jsEnum = { //not really an enum, just an object that serves a similar purpose
  FOO : "foofoo",
  BAR : "barbar",
}

Ahora puede imprimir ‘foofoo’ con

jsEnum.FOO

  • Ya, pero también puedes hacer: jsEnum.FOO = "booboo". No es una constante.

    – xr280xr

    28 de abril de 2016 a las 18:57

avatar de usuario
esteban araya

No hay constantes en JavaScript, pero para declarar un literal todo lo que tienes que hacer es:

var myString = "Hello World";

No estoy seguro de lo que quiere decir con almacenarlos en un archivo de recursos; eso no es un concepto de JavaScript.

La función de congelación estándar del objeto incorporado se puede usar para congelar un objeto que contiene constantes.

var obj = {
    constant_1 : 'value_1'
};
Object.freeze(obj);
obj.constant_1 = 'value_2';   //Silently does nothing
obj.constant_2 = 'value_3';   //Silently does nothing

En modo estricto, establecer valores en un objeto inmutable arroja TypeError. Para más detalles, consulte https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze

avatar de usuario
Beckafly

Bueno, puedes hacerlo así:

(function() {
    var localByaka;
    Object.defineProperty(window, 'Byaka', {
        get: function() {
            return localByaka;
        },
        set: function(val) {
            localByaka = window.Byaka || val;
        }
    });
}());
window.Byaka = "foo"; //set constant
window.Byaka = "bar"; // try resetting it for shits and giggles
window.Byaka; // will allways return foo!

Si hace esto como arriba en el alcance global, será una verdadera constante, porque no puede sobrescribir el objeto de la ventana.

Creé una biblioteca para crear constantes y objetos inmutables en javascript. Todavía es la versión 0.2 pero funciona muy bien. http://beckafly.github.io/insulatejs

avatar de usuario
ryan ro

A partir de ECMAScript 2015 (también conocido como ES6), puede usar const

const constantString = 'Hello';

Pero no todos los navegadores/servidores admiten esto todavía. Para soportar esto, use una biblioteca de polyfill como Babel.

avatar de usuario
Simón

Tantas maneras de despellejar a este gato. Puedes hacer esto en un cierre. Este código le dará una forma de solo lectura, con espacio de nombres, para tener constantes. Simplemente declárelos en el Público área.

//Namespaced Constants
var MyAppName;
//MyAppName Namespace
(function (MyAppName) {
    //MyAppName.Constants Namespace
    (function (Constants) {
        //Private
        function createConstant(name, val) {
            Object.defineProperty(MyAppName.Constants, name, {
                value: val,
                writable: false
            });
        }

        //Public
        Constants.FOO = createConstant("FOO", 1);
        Constants.FOO2 = createConstant("FOO2", 1);

        MyAppName.Constants = Constants;
    })(MyAppName.Constants || (MyAppName.Constants = {}));
})(MyAppName || (MyAppName = {}));

Uso:

console.log(MyAppName.Constants.FOO);       //prints 1
MyAppName.Constants.FOO = 2;
console.log(MyAppName.Constants.FOO);       //does not change - still prints 1

  • Un problema con esta solución es que puede redefinir el objeto principal. MiNombreAplicación.Constantes = null; console.log(NombreMiAplicación.Constantes.FOO); // lanzará un error

    – Beckafly

    4 de octubre de 2014 a las 7:39


  • @Byaxy, eso es correcto. Su solución sugerida es más precisa para proporcionar una ‘constante’ real. Lo que me gusta del enfoque que sugerí es que reduce el desorden del DOM y usa ‘constantes’ de una manera más organizada (en mayúsculas y espacios de nombres). Todo esto para hacer que algo funcione en un idioma que no lo admite de forma nativa. Ah, las alegrías de JavaScript. =p

    – Simón

    6 oct 2014 a las 11:39

¿Ha sido útil esta solución?