En lenguajes estáticos como Java / C #, comúnmente uso constantes para cadenas o números, en lugar de insertarlos solo en el código. Sin embargo, tiendo a evitar esta práctica en JavaScript. Más recientemente, como algunos otros programadores a mi alrededor han adoptado este enfoque en JS, decidí que probablemente debería solidificar mi razonamiento o el de ellos.
No hay una sintaxis de declaración "const" real en JavaScript. Por lo general, nos conformamos con una política informal de no cambiar las propiedades en mayúsculas. Pero mi opinión suele ser evitarlos por completo, porque la mayoría de sus beneficios se pierden en JavaScript. En Java, una cadena de error ortográfico hará que el programa falle cuando intente ejecutarlo, momento en el que lo corrige y continúa. Tener un verificador estático donde ambas instancias apuntan a la misma constante elimina ese problema, ya que se puede encontrar en tiempo de compilación. Pero JavaScript simplemente tendrá ese problema por todas partes, ya que SIEMPRE vas a descubrir la corrección de tu ortografía en tiempo de ejecución :
Library = { doThing: function() }
setTimeout(function()
Liberry.doThing()
// No such object: Liberry
}, 0);
La mejor protección contra esto, por lo general, es "uso estricto". Para los desarrolladores que lo prefieren, estoy de acuerdo con que lo usen para encontrar problemas con variables no declaradas más rápidamente. Pero mi opinión ha sido que proporcionar constantes de cadena para las API REST, etc., en realidad no lo protege contra nada. Otro ejemplo:
CompanyAPI.constants.ENROLL_URL = "/rest/enroll";
CompanyAPI.constants.FIRST_NAME = "firstName";
ajax({url: CompanyAPI.constants.ENROLL_URL,
data: CompanyAPI.constants.FIRST_NAME
});
// vs.
ajax({url: "/rest/enroll",
data: "firstName"
});
... Querías escribir lo anterior, pero luego cometiste errores tipográficos. Whoops
ajax({url: CompanyAPI.constants.ENROL_URL,
data: CompanyAPI.constants.FIRS_NAME
});
// vs.
ajax({url: "/rest/enrol",
data: "firsName"
});
El de base constante seguirá proporcionando indefinido , mientras que "firsName" no es mejor. Con ese fin, tiendo a ver esto como un beneficio de los lenguajes estáticos, y no me molesto en tener un sistema para solucionarlo (además de comenzar a usar "use estricto" para la depuración). ¿Pueden otras personas decirme cuál es su práctica preferida para la constancia de cadenas / enteros?
EDITAR: Para aclarar, mi preferencia es generalmente poner cadenas como "firstName" directamente en línea sin una declaración constante de nivel superior; las penalizaciones por escribir mal son las mismas en ambos sentidos. Cadenas que pueden alargarse, como una URL REST, tenderé a definir en la parte superior del archivo.
FIRST_NAMEen particular lo que me hizo preguntarme: ¿no cambia por usuario?
FIRST_NAME? Parece que proviene de algo del lado del servidor y se pasa al javascript. Y eso, combinado con usted diciendo que proviene de Java / C #, tengo la sensación de que está leyendo mal para qué sirven estas variables: Separar los datos del código, para que.jsel navegador pueda almacenar en caché el archivo ...