¿Cuáles son las mayores deficiencias de JavaScript?

Estos son los que puedo decir en la parte superior de mi cabeza:

  • Inserción automática de punto y coma ( ; ) sin previo aviso (y en mi humilde opinión, en absoluto); las consecuencias en las declaraciones de return y throw , y varias otras trampas sutiles (por ejemplo, una expresión de asignación no válida que abarca varias líneas puede convertirse en dos declaraciones separadas válidas)
  • Alcance global para variables no declaradas sin advertencia ; estrechamente relacionado, with declaración
  • El alcance léxico se introduce solo con funciones, no bloques en general (corregido en versiones más recientes con la declaración let )
  • Las reglas para la conversión de tipo == (por ejemplo, convertir una cadena en un número si hay un número involucrado), solo use === menos que esté realmente seguro de que necesita == ; Del mismo modo, las reglas para + (por ejemplo, convertir cualquier cosa en una cadena si hay una cadena involucrada)
  • Los números son flotantes dobles, lo que significa enteros secuenciales hasta [matemática] 2 ^ {53} [/ matemática], y sin bignums fuera de la caja
  • Las operaciones bit a bit se definen para enteros de 32 bits, y las únicas que realizan / “saben” sobre el complemento de uno cuando se convierte de nuevo a doble flota
  • No poder definir campos ocultos, sin propiedades, sin reflejo adecuado en general (corregido en versiones más recientes)
  • Los argumentos de llamada de función y los parámetros declarados de función no tienen que coincidir, ya sea por exceso (más o menos bien, aunque preferiría, por ejemplo, puntos suspensivos decir que en realidad puede tomar más argumentos) o por omisión (no está bien, no sin contar la sintaxis adecuada que algunos parámetros son opcionales)
  • Los motores de navegador JS flacky a lo largo de los años, a menudo incompletos para la versión JS que pretenden implementar, plagados de errores y características específicas que las personas tienden a abusar y luego se quejan de que no funciona con todos los navegadores

Si los conoce, puede hacer cosas buenas con JavaScript. Si no los conoce, eventualmente se disparará en el pie y comenzará a notar todas las armas cargadas que dejó en sus bolsillos.

Soy bastante nuevo en la programación seria de JavaScript, pero en mi opinión, la mayor debilidad de JavaScript es su falta de cualquier tipo de sistema de módulos o sistema de gestión de dependencias. Sí, estoy al tanto de requirejs, AMD, commonjs et. Alabama. pero realmente habría tenido mucho sentido que este tipo de funcionalidad formara parte del lenguaje dado cómo se usa JavaScript .

En realidad, incluso tener una declaración mental que funciona como #include de C sería mejor que nada.

Esta charla de Douglas Crockford le dará una buena imagen.

Se titula: “JavaScript: las partes buenas”

Video corto obligatorio: Destruya todas las conversaciones de software

JS no es tan malo. Mi cuadro personal de defectos:

  1. Las variables se aflojan y se disparan al alcance global al olvidar “var” – horrible.
  2. Lógica de inyección de punto y coma: potencialmente devastadora.
  3. Puede llamar a una función, olvidar el último parámetro (s) y solo notarlo de esta manera más tarde, terrible.
  4. Las pilas de llamadas asíncronas son difíciles de depurar.
  5. “esto” parece darle a la gente muchos problemas.

Una deficiencia que me gustaría mencionar es la falta de miradas retrospectivas en la expresión regular. Hoy me encontré con un problema que (creo) era imposible de resolver sin aplicar una mirada retrospectiva como (<=something) . Hombre..! Tuve que invertir la cadena (una invención de String.prototype.reverse() ) y resolverla con una mirada hacia adelante.

Bueno, por supuesto, el problema podría haberse resuelto por otros medios, pero sería mi defecto. Si está interesado, no dude en consultarlo en http://stackoverflow.com/questio ...

Creo que la parte OO es un fracaso.