¿Por qué es tan odiado JavaScript?

Lo que me molesta de JS es la sintaxis del lenguaje y la semántica. Juntos proporcionan un lenguaje feo y detallado que generalmente es doloroso de leer.

Al usar JS, los programadores deben escribir soluciones para superar los problemas en el lenguaje en sí , y las soluciones son inmensamente complejas y, a menudo, difíciles de entender. La mayoría de estas cosas a las que la gente no quiere preocuparse cuando están tratando de construir software, pero tienen que preocuparse por ellos y se interponen en el camino.

Cosas como:

  • ¿Cuál es el valor de una variable? (Ver elevación).
  • No hay módulos y soluciones inconsistentes para espacios de nombre y módulos.
  • Múltiples formas de construir objetos, todos los cuales parecen estar perdiendo proposiciones de una forma u otra.
  • ¿Cuál es el valor de “esto”?
  • ¿Usando métodos en objetos o métodos prototipo, o ambos?
  • Alcance contraintuitivo. (Sin ámbito de aplicación).
  • Igualdad de cualquier cosa.

Esta es la razón por la que hay tantas bibliotecas e idiomas de transpilación que limpian la sintaxis y la semántica de JS, o permiten que los programadores utilicen lenguajes completamente diferentes. Incluso las personas a quienes les gusta escribir en JS necesitan escribir transpilers y lenguajes completamente nuevos para que puedan entender y organizar su código más fácilmente.

Obviamente, ningún lenguaje viene sin cierto nivel de complejidad. Sin embargo, opino que otros idiomas tienen semánticas más simples y elementos de lenguaje con definiciones explícitas, lo que facilita su uso.

Aquí hay un ejemplo con respecto a la semántica y los elementos explícitos del lenguaje. Java tiene clases. Las clases contienen métodos y campos. Los métodos y los campos se pueden declarar como parte de la clase (estática) o como miembros de la instancia. Los métodos y campos tienen modificadores de acceso. Desde las clases se pueden instanciar objetos. Los objetos tienen constructores que están definidos de la misma manera. Hay muchos más elementos de lenguaje para implementar la herencia, etc. El punto es que todos estos elementos de lenguaje se hacen explícitos. Las clases son el elemento base de la abstracción, y los elementos de los que están compuestos se identifican claramente con sus propios nombres y semántica.

A la inversa, JavaScript tiene objetos y funciones (que también son objetos) y variables (que pueden apuntar a objetos, que de nuevo pueden ser funciones), y los objetos no son realmente objetos, son matrices asociativas. El programador implica diferentes semánticas dependiendo de la forma en que combinan y anidan estas cosas. Esto significa que el significado de código es implícito. Combine esto con la semántica de alcance y los cierres, y obtendrá lo que yo llamo la “complejidad combinatoria” de JavaScript. La complejidad combinatoria puede tener un significado en otra parte, pero mi uso se refiere al uso de los mismos elementos en diferentes combinaciones que tienen significados implícitos.

Cuando pienso en JavaScript lo pienso de esta manera:

En inglés podría decir, “voy a la tienda”, porque el inglés tiene diferentes tipos de palabras que me permiten construir oraciones.

En JavaScript, es posible que solo tengamos una palabra, la palabra “Tienda”, por lo que podría decir “Tienda” para que signifique “Me voy a la tienda”.

En inglés podría decir: “Me voy de la tienda”.

En JavaScript, diría, “Tienda tienda”, que significa que me voy de la tienda, y así sucesivamente.

Tal vez decir: “La tienda se quemó y ya no hay más de tu sopa favorita”, en JavaScript, podría escribir “Tienda” 99 veces. Para inferir cualquier significado, el lector tendría que leer / contar la oración y solo al encontrar la “Tienda” número 99 sabría lo que estoy diciendo.

Así es como me siento cuando leo funciones envueltas en funciones, envueltas en cierres, envueltas en expresiones de funciones invocadas de inmediato, envueltas en quién sabe qué otra cosa puede inferir que el programador está tratando de hacer un módulo, o algo así.

Las metáforas mixtas de JavaScript (procedimental, funcional, orientada a objetos) no facilitan las cosas. Dependiendo de cómo combine un solo bloque de construcción (funciones), puede crear una abstracción en cualquiera de esas metáforas. Se requiere mucho esfuerzo para comprender qué implica el código.

Cosas como el patrón del módulo y otros intentos de crear ámbitos privados con estado y razonamiento localizados que usan cierres y funciones envueltas en funciones, envueltas en funciones, son una locura. Se convierte en un caos de razonamiento implícito, es decir, “si envuelve un grupo de funciones de esta manera, implica que el alcance es como tal y que estas variables pertenecen a esta parte del código, y no debe tocar estas variables y no debería tocarlas. No llames a este método así porque se romperá “. Debe leer el código con mucho cuidado y seguir todas las funciones y cierres para conocer el significado implícito del programador.

Compare esto con algo como Java, donde tiene elementos de lenguaje explícitos como clases para denotar el alcance local, los métodos con alcance de método, los bloques con alcance de bloque y los modificadores de acceso para controlar la privacidad. El lenguaje deja muy claro cuál es la intención del programador, y es inmediatamente reconocible.

La gente sostiene que quejarse JS no tiene clases es un sesgo de usar lenguajes OO compilados basados ​​en clases, pero no se trata de clases. Se trata de elementos de lenguaje claros y explícitos, que permiten a los programadores leer el código y entenderlo rápidamente.

Si quiero crear una unidad de código con alcance local que pueda ser instanciada, entonces debería haber un elemento de nivel de lenguaje explícito y partes explícitas relacionadas para hacer eso, no una combinación del mismo elemento de lenguaje para crear un patrón implícito. Un lenguaje debe otorgar a los programadores control sobre el código y la capacidad de evitar que las funciones y los datos se filtren por todo el lugar al proporcionar elementos de apoyo. JavaScript no hace eso.

Aquí hay algunas citas de Wikipedia que muestran algunas de las rarezas, y cómo JavaScript es particularmente confuso:

JavaScript está casi enteramente basado en objetos. Los objetos de JavaScript son matrices asociativas, aumentadas con prototipos (ver más abajo). Los nombres de las propiedades de los objetos son claves de cadena. –

Un objeto ni siquiera es un objeto en JS. Es una matriz asociativa aumentada con un prototipo, y es importante que los programadores comprendan este detalle de implementación para usar el lenguaje correctamente.

Las funciones son de primera clase; son objetos en sí mismos. Como tales, tienen propiedades y métodos, como .call () y .bind (). -JavaScript

Una función anidada es una función definida dentro de otra función. Se crea cada vez que se invoca la función externa. Además, cada función creada forma un cierre léxico … -JavaScript

Sé que a todos les gusta hablar sobre cierres, pero nuevamente este es un ejemplo de la complejidad combinatoria. Terminas con un código como este:

var elems = document.getElementsByTagName (‘a’);
para (var i = 0; i <elems.length; i ++) {
elems [i] .addEventListener (‘click’, (function (lockedInIndex) {
función de retorno (e) {
e.preventDefault ();
alerta (‘I link #’ + lockedInIndex);
};
}) (i), ‘falso’);
}

– Expresión de función invocada inmediatamente (IIFE)

Las funciones se doblan como constructores de objetos junto con su función típica. El prefijo de una llamada de función con una nueva creará una instancia de un prototipo, heredando propiedades y métodos del constructor … A diferencia de muchos lenguajes orientados a objetos, no hay distinción entre una definición de función y una definición de método. Más bien, la distinción se produce durante la llamada a la función; cuando se llama a una función como método de un objeto, la palabra clave local de la función está vinculada a ese objeto para esa invocación.

Más combinaciones creando nuevas semánticas dependientes del uso situacional. Cualquiera que haya programado en JS conoce la molestia de tratar con este enlace.

Creo que una buena parte es que hay una biblioteca JS para todo ahora … jackdcrawford / five

Porque apesta.

JavaScript es un lenguaje de programación miserable. Cualquiera que te diga lo contrario o diga cosas como “Oh, es como lisp, wah wah wah, se entiende mal wah wah wah”. ha avanzado el síndrome de Estocolmo JavaScript.

En primer lugar, JavaScript no es como lisp . ¿Por qué? Me alegra que hayas preguntado:

* La sintaxis de Lisp consiste en gran parte en las expresiones S de prefijo polaco, como esta: (sqrt (* 2 3)). JavaScript tiene una sintaxis tipo C

* La estructura de datos central de lisp es la lista. JavaScript no tiene un tipo de lista. Las matrices de JavaScript no son listas. La estructura de datos central de JavaScript es la matriz asociativa, a menudo enmascarada como algún otro tipo de datos.

* Lisp es homoicónico, su código y sus datos tienen la misma representación primaria. JavaScript no lo es. Ni siquiera un poquito.

* Lisp, debido a su homoiconicidad, naturalmente se presta a macrosistemas poderosos. JavaScript no tiene macros.

* Tener lambdas no hace un lenguaje como lisp. C ++ tiene lambdas, Java tiene lambdas, Python tiene lambdas, Haskell tiene lambdas. Nadie es tan estúpido como para confundir esos idiomas con lisp.

Bien, ahora a por qué el JavaScript en sí apesta.

JavaScript se esfuerza tanto para evitar fallas que impiden su uso.
En lenguajes de programación que no están diseñados por idiotas, hacer cosas sin sentido, como intentar multiplicar una cadena por otra cadena o tomar la raíz cuadrada de una matriz, bloqueará tu programa. Ésto es una cosa buena. Después de que su programa falla, usted notará que se estrelló y corrigió el error. Entonces ya no se estrellará. En JavaScript ninguno de estos cuelga. En su lugar, dan un resultado que no tiene sentido, almacena este resultado y luego el programa se bloquea más tarde o no hace lo que quería. Ahora, en lugar de haberse estrellado justo donde escribiste el error, se estrellaron miles de millones de líneas de código más tarde, y debes rastrear el error real y solucionarlo. Este es un problema enorme, y solo empeora cuanto más grande es su programa.

JavaScript intenta pretender que tiene clases, pero no las tiene. JavaScript tiene un prototipo basado en un sistema de herencia, que está bien, pero no es honesto, hasta el punto de que la mayoría de los programadores de JavaScript no entienden realmente cómo funciona. Recibí muchos comentarios de desarrolladores de JavaScript con experiencia que revelaron malentendidos graves y generalizados sobre las características básicas del lenguaje. Esta es la causa de muchos errores extraños, APIs feas y simulacros improvisados ​​extraños de otros lenguajes de programación.

JavaScript no tiene sistema de módulos. Puedes construirte un sistema de módulos con cierres, pero eso es una tontería. Si ordenó una CPU de Intel y Gordon Moore le envió instrucciones sobre cómo ir a la playa, conseguir algo de arena, ponerla en un horno, convertir la arena fundida en obleas de silicona, grabar algunas puertas en ellas y hacer un microprocesador. Te reirías en su cara, ¿verdad? Bueno, eso es lo que te hace hacer JavaScript cuando estás sacando tu propio sistema de módulos fuera de los cierres. Incluso los archivos de encabezado de estilo C, que operan a través de la inclusión de texto literal y son considerados como lo peor, serían una mejora.

Probablemente podría seguir y seguir sobre otros temas, pero los tres anteriores son suficientes. No son elecciones estilísticas sobre las cuales las personas razonables podrían estar en desacuerdo. Son defectos. No hay universo en el que sean buenas elecciones.

¿Y sabes cuál es la parte realmente enferma de todo esto? ¿Sabes lo que voy a hacer ahora mismo ? Voy a escribir algo de JavaScript, porque quiero que mi programa se ejecute en todas partes, por lo que no tengo otra opción. Pero puedes estar seguro de que voy a maldecir el estúpido y estúpido rostro de Brandon Eich mientras lo hago.

Nota: Esta respuesta integra correcciones de hechos profundas de Ryan Grove, así que diríjase a su aclamación, ya que él sabe mucho más sobre esto que yo.

—-

A diferencia de PHP, los expertos más profundos en JavaScript de la industria, aunque detestan sus muchas fallas, todavía parecen respetarlo por su flexibilidad y poder, mientras que todos los que conozco que alcanzan cierto nivel de experiencia en PHP terminan por despreciarlo (excepto quizás por Iain). Procurador). He investigado esto un poco, ya que es muy curioso, y esta es mi teoría:

Primero, JavaScript tiene raíces nobles. Es, efectivamente, aproximadamente tan poderoso como Lisp y, de hecho, se ha descrito como “implementado por Lisp para navegadores web”. Si estudia JavaScript por un momento, notará que en gran medida trata todo como si fueran elementos de una lista y opera principalmente mediante el procesamiento sobre esos elementos. Esto significa que, en su esencia, es tremendamente poderoso. Esto se ha demostrado en la práctica durante la última década, ya que JavaScript fue una de las tecnologías clave sorpresa en la migración de Internet del contenido en gran parte estático “Web 1.0” al estilo mucho más interactivo y en tiempo real que ahora está presente en los sitios modernos. ¿Recuerdas cuando JavaScript se usó en 1999 para los volcados de imágenes? Hoy en día, es uno de los pilares clave para habilitar cosas como la propia actualización en el lugar del contenido automático en tiempo real de Quora. Estamos hablando del mismo idioma aquí.

Sin embargo, a pesar de la potencia central y la flexibilidad de JavaScript, su estrecha asociación con el Document Object Model (DOM) ha dado una mala impresión a muchas personas. Si bien el JavaScript está definido por un estándar escrito (ECMAScript) y se implementa de manera bastante consistente en todos los navegadores, no hay dos navegadores que implementen la API DOM exactamente de la misma manera, y las diferencias no se limitan a las características periféricas, sino que incluyen el comportamiento de la funcionalidad principal, como como manejo de eventos (es decir, cuando hace clic en un botón del mouse). Esto obliga a los desarrolladores web a envolver muchas llamadas DOM en módulos de encapsulación codificados de forma extremadamente defensiva que detectan por navegador y “igualan” los diferentes comportamientos en un resultado consistente que puede ser utilizado por el resto de su base de código. Solo los mejores desarrolladores web saben que necesitan hacer esto (muchos mediocres simplemente lo hacen funcionar para un solo navegador dominante y luego lo abandonan), y luego solo los mejores de los mejores tienen la capacidad y la persistencia de hacerlo correctamente . Ya que muchos desarrolladores web creen erróneamente que JavaScript y el DOM son lo mismo, esto los lleva a odiar el JavaScript por los pecados del DOM.

(también hay varias características de lenguaje que a menudo son criticadas por los desarrolladores y expertos, pero no voy a entrar en ellas. Por mucho, la mayor angustia parece ser el resultado de un comportamiento inconsistente en las implementaciones de los navegadores)

Lo que da como resultado todo esto es una sensación de que “JavaScript es tan poderoso, por lo que me siento obligado a usarlo, pero para hacerlo correctamente, ¡personalmente debo gastar energía manteniéndome al tanto de todos estos pequeños detalles!” Si fuera tan fácil simplemente ignorarlo, nunca lo sabríamos, pero debido a que debe ser utilizado (debido a su poder y flexibilidad), escuchará sobre todas esas quejas, por lo que parece que tanta gente odia JavaScript

La razón principal por la que se odia a JavaScript, en mi opinión, es que en muchos casos, los desarrolladores se ven obligados a usarlo. A nadie le gusta ser forzado a hacer cosas, y esto es especialmente cierto para los desarrolladores de software, quienes son notoriamente independientes acerca de las tecnologías que eligen usar. Muchos desarrolladores no están contentos con la necesidad de usar JavaScript al desarrollar aplicaciones front-end que se ejecutan dentro de los navegadores. Será interesante ver qué sucede cuando WebAssembly permite utilizar otros lenguajes de programación para implementar front-ends basados ​​en navegador.

Otro aspecto de JavaScript que molesta a muchos desarrolladores es su sistema de herencia basado en prototipos, y el comportamiento de este al invocar métodos JavaScript. Ambos se comportan de manera diferente a la forma en que operan la mayoría de los otros lenguajes de programación orientados a objetos. Dado que la mayoría de los desarrolladores aprenden OOP utilizando lenguajes que utilizan la herencia basada en clases, el comportamiento de JavaScript parece inusual y confuso. Mi cita favorita en este contexto es:

JavaScript me da ganas de voltear la mesa y decir “Fuck this shit”, pero nunca puedo estar seguro de a qué se refiere “this”. – Ölbaum

Relativamente recientemente, JavaScript adquirió clases, y también está enlazado estáticamente, gracias a las funciones de flecha. Será interesante ver si estas mejoras en el lenguaje cambian las actitudes de tales desarrolladores.

Los atributos adicionales de JavaScript que a muchos desarrolladores no les gustan incluyen:

  • Enlace dinámico: JavaScript es un elemento secundario para el enlace dinámico y, por lo tanto, es odiado por los aficionados al enlace estático.
  • La falta de interfaces y la dependencia total en la tipificación de pato: en gran medida, se creó TypeScript para aliviar esto
  • Confusión de conversiones de tipos implícitas: esta es la fuente de la mayoría de las presentaciones de “JavaScript extraño”
  • El DOM: mientras que el DOM es técnicamente distinto de JavaScript, muchos desarrolladores los ven como uno solo. El DOM tiene muchas deficiencias e inconsistencias
  • Excesivo uso de herramientas y fatiga del marco, incluido JavaScript en una página web que significa simplemente crear un archivo de texto y una etiqueta de script que lo vincula. Ahora necesita npm, yarn, WebPack, Babel, ESLint, etc. y para adivinar qué marco será popular el próximo año.
  • Muchas personas que usan JavaScript nunca se capacitaron realmente como desarrolladores. En su lugar, provienen de otros fondos, como el diseño. A estas personas no les gusta JavaScript simplemente porque realmente no saben cómo usarlo.

A todo esto le digo: “muéstrame un lenguaje de programación que no sea odiado, y te mostraré un lenguaje de programación que no se usa ampliamente”.

Creo que la razón principal es que la mayoría de los desarrolladores con un fondo de POO como yo creo que Javascript es casi lo mismo con otros idiomas. Pero no lo es. Javascript no tiene clase, solo objetos. La herencia es diferente en Javascript. Así que es como aprender un tipo de lenguaje realmente diferente. También hay algunas fallas de diseño en Javascript como ==, elevación, alcance (esto), etc. Estas cosas pueden generar resultados extraños si se usan o no se entienden realmente. Pero no importa cómo odie Javascript, y desea trabajar en el navegador web, no puede escapar de él. Y esa es la parte frustrante, no tienes otra opción. Y ahí está el DOM que conforma el navegador. DOM es tan complicado de manipular y Javascript es el único idioma para el trabajo. Así que decidí amarlo y aceptarlo. De hecho, tiene mucho más que ofrecer de lo que piensas. Ahora que tenemos AngularJS, React y algunos otros marcos, es mucho más divertido trabajar con él. Con el lanzamiento de ES6, los chicos de OOP pueden aprovechar las clases. Así que Javascript está evolucionando bastante para hacernos felices.

Para los desarrolladores menos familiarizados con el lenguaje, especialmente aquellos con experiencia en lenguajes que comparten una sintaxis similar, JavaScript parece engañoso e inadecuado.

Por ejemplo:

  • Quieres que el valor de esto en this.bark () sea ​​un perro, pero resulta ser un pez.
  • Espera que “100” == 100 se evalúe como falso , pero se evalúa como “blueberry”.
  • Finalmente aprendes lo que significa “pasar una función” y pasas una función llamada getYesterdaysDate () . Sin embargo, cuando se invoca finalmente, ¡la función devuelve la fecha de hoy!

Además de todo esto, cada vez que busca una característica de lenguaje familiar, parece que JavaScript nunca la tiene:

  • Buscas variables de instancia privadas. No puedo encontrarlos.
  • Buscas clases abstractas e interfaces. No puedo encontrarlos.
  • Buscas estructuras de datos básicas e integradas. No puedo encontrarlos.
  • Buscas una manera de definir funciones y … OK, ¡al menos eso tiene!

Es cierto que he tomado un poco de licencia creativa con lo anterior, pero la realidad no es muy diferente. El punto esencial es que JavaScript contiene una gran cantidad de “errores”, muchos de los cuales ni siquiera parecen lógicos una vez que aprendes cuáles son. Lo peor es que JavaScript se esfuerza por actuar como algo que realmente no es, es decir, un lenguaje tradicional orientado a objetos, y ese hecho causa mucha confusión y frustración.

También está el hecho de que JavaScript intercambia seguridad por flexibilidad, y muchos desarrolladores desagradan comprensiblemente este intercambio. Vea la respuesta de Jason Roos a ¿Está justificado todo el odio que tienen muchos programadores por JavaScript?

Es tan fácil ser negativo, es nuestra primera y más importante emoción al nacer “wtf?!?!?! ponme de vuelta ahí yo !!! ¿A dónde se fue mi comida? ¿Por qué es tan brillante?!?!? ¿¿Una aguja?? me vas a pinchar con una aguja?!?!? wahh wahh !!!! ”como resultado de esa experiencia (… nacimiento) las personas son propensas a ser negativas.

JavaScript es odiado porque es forzado en las personas como el idioma que admiten los navegadores en el lado del cliente. Todo lo que se fuerza a las personas es odiado porque la falta de elección es lo que la gente realmente odia. Por supuesto, las personas tienen sus razones para odiarlo, algunas específicas también, pero ese sería el caso con CUALQUIER idioma, especialmente uno forzado como el único.

Sí. Debe usar varios idiomas cuando y donde tengan sentido, pero limitarse a centrarse en un solo idioma y no simplemente “hacer cosas interesantes” independientemente del idioma o lo que sea popular, en general siempre será limitado.

Algunas personas odian secretamente todos los idiomas porque no les gusta la programación. Es como un mecánico de automóviles que odia a cada automóvil y cada automóvil es el mayor punto de venta, por lo que su propia habilidad no es el problema, pero si el ingeniero original obtuvo su título de ingeniero de una caja de galletas o no está ahora en cuestión y el mecánico La habilidad no es el enfoque.

Al odiar JavaScript, una persona puede culpar al idioma en lugar de a su propia habilidad.

Lleva mis habilidades al límite cuando tengo que depurar el espacio en blanco que usa Python. No me gusta esa parte de Python, me desafía y me gusta evitar usar Python porque me hace cuestionar mi cordura y mis habilidades como programador. Todo el mundo tiene un lenguaje o un “algo” que les hace eso.

Cada idioma tiene diferentes objetivos y formas generales de hacer las cosas, todos tienen uno que no les gusta, JavaScript es popular y, por extraño que parezca, muchas de las personas que odian JavaScript también odian [a los otros dos idiomas que usan] por otras razones.

Es realmente increíblemente fácil ser negativo acerca de algo, literalmente toma 0 talento o creatividad para ser negativo y es a menudo el camino de menor resistencia que la gente elige.

JavaScript ha crecido con el tiempo y, en un momento dado, los navegadores ni siquiera lo “aceptaron”, por lo que las cosas de las que ahora se quejan las personas se están reduciendo a “prefieren el verde no el azul” o “podría hacerse un 0,1% más” eficientemente “o” no me gusta wah! wah! wah! “.

La gran popularidad (nos obliga a nosotros …) lo ha hecho propenso a quejarse de más que de lenguajes menos populares.

La naturaleza de “nosotros contra ellos” de las personas es una extensión de la negatividad desde el nacimiento que somos propensos a tener. Si puedes considerarte un desarrollador [de lenguaje] y no “alguien que hace cosas geniales”, puedes ser el único que se limite.

Anónimo porque aunque la política de nombres reales de Quora comenzó siendo importante, la convirtió en un concurso de popularidad y algunas personas ya no escriben por escribir. Ser anónimo te asegura a ti, el asombroso lector, que no estoy escribiendo esto para ser bueno, obtener votos o ganar popularidad. La pregunta era pedir una opinión sobre una opinión.

En diciembre de 2009 / enero de 2010, decidí darle una oportunidad a todo este asunto de SSJS. Pasé algo de volver a aprender JavaScript e intenté escribir algo de código (una implementación de Avro). Me detuve rápidamente en mis pistas por algunas cosas:

1) Múltiples enfoques de la herencia de objetos. Crockford hace que parezca que hay una buena manera de hacer las cosas, pero leer “JavaScript orientado a objetos” muestra múltiples enfoques y, a menudo, es difícil descubrir cuál es el adecuado para su aplicación.
2) No hay noción de “módulos” u otros medios para reutilizar el código de la biblioteca. Sí, entiendo que CommonJS debe abordar este problema, y ​​hay estándares en evolución por ahí. Desafortunadamente, hasta que se ratifiquen estos estándares, no todos los proyectos utilizarán la maquinaria que surge alrededor de un sistema de módulos (por ejemplo, colmillo, activar / mar).
3) No hay un intérprete estándar: para ejecutar mis scripts, utilicé Rhino, V8 y Tracemonkey, cada uno de los cuales tiene sus propias peculiaridades.
4) No es posible trabajar con archivos o realizar otras tareas comunes de sistemas. Una vez más, CommonJS puede hacer que esto suceda, pero no es estándar.
5) Es realmente difícil trabajar con datos binarios en JavaScript.
6) Un montón de métodos de conveniencia que faltan. Por ejemplo, no hay un método para determinar si una matriz contiene un elemento específico, para obtener la cantidad de elementos en un objeto o para probar si un objeto está vacío.

Esos puntos están fuera de mi cabeza, y estoy seguro de que algunos devotos de JavaScript señalarán cosas que pasé por alto. Sin embargo, pasé una semana inmerso en el tema y no pude hacer tanto progreso como esperaba. Desde mi perspectiva, JavaScript tiene mucho trabajo por hacer antes de que pueda ser utilizado como un lenguaje de scripting de propósito general.

Entonces, aunque no “odio” el JavaScript, puedo ver por qué algunas personas pueden tener una opinión negativa del idioma en relación con la cantidad de ruido creado por sus usuarios. Simplemente no es útil como un lenguaje de propósito general todavía.

JavaScript no es Java. Es esencialmente solo un lenguaje de scripting para los navegadores, y hace su trabajo mal también. No es culpa de JavaScript, la falla generalmente se debe a la forma en que se programan varios navegadores. Sin embargo, JavaScript en sí mismo no es un lenguaje serio ni estructurado adecuadamente, y no creo que haya sido creado como tal. Es un desastre en mi opinión, y no sigue los estándares de computación u OOP. Es un lenguaje de programación de nivel amateur, hecho principalmente para usar en scripts en navegadores.

A medida que gané más experiencia en programación de computadoras, también empecé a odiar JavaScript. No es porque sea un mal lenguaje, es porque sus ‘fanáticos’ han intentado constantemente convertirlo en un estándar de facto para lo que no es. Esto es especialmente cierto para el desarrollo de aplicaciones móviles. Estos desarrolladores, muchos de los cuales probablemente no tienen una formación adecuada en ciencias informáticas o ingeniería, en lugar de aprender OOP y los lenguajes correctos como Java, Objective-C, Swift, C ++, C #, etc., han estado dedicando mucho tiempo a produzca una plataforma única para tecnologías de desarrollo de aplicaciones móviles con el objetivo de llevar de alguna manera el desarrollo de aplicaciones móviles a JavaScript y, básicamente, representar páginas web como aplicaciones móviles. Esto solo ha servido en la producción de herramientas de desarrollo de aplicaciones móviles de baja calidad que producen aplicaciones móviles de calidad inferior, baja calidad y rendimiento deficiente. Ahora hay tantas de estas herramientas basadas en JavaScript, que no solo ha contaminado el mundo del desarrollo de aplicaciones móviles con entornos de desarrollo deficientes, sino que también ha confundido a muchas compañías e individuos en cuanto a qué tecnología usar para construir aplicaciones móviles. Esto también ha confundido a la gente en cuanto a si hacer el desarrollo de la manera correcta (es decir, nativa) o de alguna forma de acceso directo (es decir, no nativa). Por lo general, la justificación es el menor costo de desarrollo, que no es más que una excusa para la basura. Primero, producir un pedazo de basura y luego arreglarlo y mantenerlo siempre toma más tiempo, dinero y energía que producir un buen software la primera vez. He visto que esto sucede con muchas empresas para las que he trabajado, he oído hablar o he observado su historial de desarrollo de aplicaciones móviles. Pones un pedazo de basura frente a tus usuarios y, de todos modos, perderás negocios en este feroz mercado competitivo. A lo largo de los años, he visto muchas compañías, incluso gigantes, en las que pensarías que toman decisiones inteligentes y correctas como Facebook, LinkedIn, The Weather Network, varios bancos, solo para nombrar un nuevo, que inicialmente lanzó sus aplicaciones en no nativas. versiones, solo para darse cuenta de lo que habían producido, y luego cambiar a nativo. Adivina la cantidad de dinero que gastaron haciendo lo mismo otra vez. ¿Quién ganó aquí? Los desarrolladores de JavaScript que engañaron al mundo para hacer aplicaciones móviles en JavaScript. Y sigue habiendo muchas nuevas empresas nuevas y pequeñas empresas, que se engañan al creer que alguna herramienta de JavaScript, con grandes promesas, ayudará a su negocio al producir aplicaciones maravillosas, ejecutándose en todas las plataformas, en menos tiempo y dinero. . Adivina qué, no lo hará. Solo algunos desarrolladores de JavaScript ganarán su dinero y luego seguirán adelante. Como consultor, voy a las empresas, incluidos los departamentos gubernamentales todo el tiempo, para escuchar sus historias de aplicaciones mal producidas por la última compañía, solo para descubrir que era otro sitio web no nativo de JavaScript disfrazado de aplicación móvil, que ahora es roto sin una solución rápida.

Lo anterior me ha hecho personalmente odiar JavaScript. Está sobrepasando sus límites. Y aquellos que lo están logrando son, en mi opinión, desarrolladores web perezosos que no quieren aprender las herramientas correctas del comercio e intentan forzar su conocimiento de JavaScript donde no se aplica o pertenece, y no dicen la verdad sobre Es para sus clientes que las aplicaciones móviles creadas en él sean deficientes y en la mayoría de los casos vendrán a atormentarlos una vez en producción.

Oh, esto es fácil. Porque es un lenguaje que viene completamente preparado para volar su pierna, pero no proporciona la potencia o la eficiencia que ofrecen otros idiomas con ese riesgo. En resumen, Javascript es desproporcionadamente peligroso.

Se ha tipificado de forma flexible (bordeando en lo no tipificado, pero no del todo) y permite no solo saltar entre tipos, sino incluso pretender temporalmente que las variables son tipos diferentes. Ahora, me encanta este aspecto de JavaScript, pero de hecho me ha quemado muchas veces cuando me estaba sintiendo cómodo. También ha quemado a otras personas que han modificado mi código. Lo que nos lleva al peligro dos.

Se inspira el código “complicado”. Debido a que javascript es inherentemente un lenguaje de scripting (y siempre lo será, en el fondo) tiene una tendencia a tener hacks realmente “complicados”, que es solo el código de “No recuerdo cómo # $% ^ ¡Hice esto!”

ES6 ha hecho mucho para mejorar las cosas, pero está lejos de resolverlas por completo. Todavía hay muchos errores, por ejemplo, cuando usas el doble igual cuando quisiste decir, realmente querías decir, el triple igual, y de alguna manera 1 termina igual a “1” y tu aplicación falla con un error extraño que solo aparece cuando la entrada es en realidad un número y no una cadena con funciones de cadena disponibles, y solo ocurre con ciertas configuraciones especiales en tiempo de ejecución porque olvidó el tercer signo igual.

La inserción automática de punto y coma significa que no tiene que finalizar explícitamente las líneas. También significa que javascript intenta GUESS donde termina su línea. Adivina qué, no siempre adivina bien. ¿Quién de verdad ha puesto una nueva línea después de una declaración de retorno y se pregunta por qué su función se ha vuelto indefinida? Sí, creo que todos lo hicimos una vez. Todos aprendimos que la devolución se considera una declaración completa que devuelve 0 o más simplemente, indefinido.

Estas son solo algunas de las formas en que javascript está completamente equipado para volarte la pierna. Hay otros idiomas con riesgo similar, como lisp. Sin embargo, esos idiomas ofrecen una compensación, son extremadamente expresivos para ciertas tareas y dan enormes dividendos en la eficiencia del desarrollador para un desarrollador experto. Javascript no lo hace del todo. Hay desarrolladores (como yo) que han aprendido a dominar Javascript y no tienen el mismo peligro inherente a su uso. No lo odiamos. ¡Pero los desarrolladores que tocan javascript de vez en cuando o que generalmente solo han jugado con él tienden a odiarlo porque se les voló la pierna una vez y todavía no saben por qué!

EDITAR: Revisé mi publicación y me di cuenta de muchos errores de ortografía, así como mi fecha de conocimiento en ese momento. Tengo sentido reescrito mi publicación para reflejar mis puntos de vista más recientes y la capacidad de deletrear.

Durante mucho tiempo escuché los grimes de muchas personas aquí y allá que me dieron la idea de que JavaScript estaba medio roto, el paso de cabeza roja de los lenguajes de programación y, por lo tanto, ni siquiera intenté aprenderlo. Pero un día, un compañero de trabajo me presentó “JavaScript the Good Parts” de David Crockford (un libro y un video en YouTube). Y realmente me ayudó a darme cuenta de algunas de las partes malas de JavaScript y por qué en su corazón es realmente un lenguaje increíble.

Creo que una razón es que la gente odia lo que no entiende. Crockford llamó a JavaScript “el lenguaje de programación más incomprendido del mundo”. No es realmente su culpa, JavaScript fue mal llamado, tiene una sintaxis tipo C, pero en el fondo se hizo con ideas completamente diferentes. Debido a esto, hay muchas personas que vienen de C ++ o Java y esperan más de lo mismo y no encuentran eso. El alcance léxico, los tipos, las clases, la herencia y la encapsulación son todas las cosas que a primera vista parecen estar ausentes de JavaScript. Creo que la mayoría de las veces, su primera confirmación es cuando ven una “clase” en JavaScript, por no mencionar la herencia. El truco es que estas cosas se pueden obtener en JavaScript, ¡solo tienes que hacerlas tú mismo! Una vez más, Crockford tiene un buen resumen de la herencia aquí: Herencia clásica en JavaScript.

JavaScript se basa en ideas diferentes, por lo que será necesario que aprendas a programar de una manera diferente. Mi consejo es tratar de ver el por qué detrás de las cosas en JavaScript. Creo que es realmente útil recordar que se ajustó a un lenguaje similar al de un lisp que se enorgullecía de ser flexible y simple. Al igual que lisp, intenta darle los bloques de construcción más simplificados y permitir que el usuario los junte de la manera que mejor les parezca.

Como ejemplo de esto, considere el objeto en JavaScript. Los objetos son simplemente pares clave-valor. Le das el nombre y te da el valor. Pueden crear un simple como este:

var obj = {};

En lugar de tener clases integradas en el lenguaje, te permiten simplemente hacer una función que construya objetos . al igual que:

var CatFactory = función (nombre) {
regreso {
nombre nombre,
miau: función () {
console.log (nombre + “: Meow!”)
}
}
};

var suzie = CatFactory (“Suzie”);

suzie.meow (); // -> “Suzie: ¡Miau!”

¿Hace esto todo lo que hace una clase? ¡No! Y esa es la belleza de ello. Hace lo que necesito y nada más. Si quisiera agregar herencia o incluso mixins podría, pero no tengo que hacerlo. JavaScript te da la opción.

Así que sí, JavaScript es bastante diferente, pero creo que tiene su propio encanto si te tomas el tiempo para entenderlo.

Creo que hay varias razones clave:

  • JavaScript es realmente fácil de usar. Incluso un idiota puede usarlo. C ++, Java y otros lenguajes tienen una barrera de entrada más alta. Y con los desarrolladores junior escribiendo muchos JavaScript, muchos JavaScript van a ser una mierda. Esto no es culpa del lenguaje, sino un efecto secundario de la facilidad de uso.
  • JavaScript tiene fallas. Otras respuestas entran en gran detalle sobre ellos, exagerando muchas de ellas al extremo, por lo que no me molestaré con ellas aquí. Fue diseñado rápidamente por razones de marketing (para que pudieran decir “¡tenemos un lenguaje de script en el navegador!”). La cuestión es que, si utiliza ES2015 y una guía con reglas estrictas, ninguna de esas fallas sigue siendo relevante.
  • Al igual que PHP, JavaScript es un lenguaje “bueno” que a los desarrolladores les encanta odiar. Es una señal de que eres parte del grupo “cool”, un silbato para perros. Así que la gente se enfurece para mostrar cuán impresionantes son. (Yo, ejem, puedo saber acerca de este hecho en particular porque podría haber sido uno de esos desarrolladores, alguna vez …)
  • JavaScript se utiliza para chupar mucho más. Se ha mejorado mucho ahora con ES2015 y cambios más recientes. Puede transferir incluso las funciones de ES2016 + a ES5, por lo que puede usar todas las funciones geniales de hoy. Pero una vez, cuando muchos de los desarrolladores (incluido yo mismo) se encontraron con JavaScript por primera vez, hubo muchas quejas.
  • Los problemas con el DOM son culpados en JavaScript. JavaScript es un lenguaje de programación. El DOM y las funciones del navegador relacionadas con el DOM son simplemente una API de JavaScript. La compatibilidad de JavaScript entre los navegadores ha sido excelente durante bastante tiempo. Pero todos recuerdan las incompatibilidades de la API DOM con las que tuvieron que luchar, y pintan JavaScript con el mismo pincel.

Yo diría que cada una de las principales quejas que se encuentran en otras respuestas a esta pregunta ha sido abordada por ES2015 y / o por los linters modernos. Eso incluye:

  • Sistemas modulares
  • Un sistema de clase estándar único.
  • El “valor de esto”
  • Bloqueo del alcance (siempre tengo mi indicador de la aplicación “no var palabra clave”)
  • Igualdad (usar siempre === )
  • Estandarización del lenguaje a través de implementaciones.
  • El lenguaje tiene “peculiaridades”, como el punto y coma (Solo. F’ing. Use. Ellos. ¡Y haga que su cursor las aplique! ¡Bang, no hay problema!) Y parseInt veces trata un cero inicial como si fuera octal (cuando se usa el “modo estricto”, parseInt ganó No hagas eso más).
  • Y cuando esté listo para los tipos estáticos, tiene TypeScript como un JavaScript con tipos totalmente compatible con ES2015, después de lo cual nunca más sufrirá otra conversión de tipo sorpresa que no funciona de la manera que espera.

Es por eso que actualmente estoy usando JavaScript (en realidad, TypeScript) en mi trabajo diario, y no me arrepiento en absoluto. Hay mucho que decir al respecto; Es potente como un Lisp pero mucho más legible, e incluye un ecosistema de marcos y bibliotecas superalimentado.

Una rápida búsqueda en Google revela varias fuentes que documentan por qué JavaScript apesta:

  • ¿Por qué JavaScript chupa? | Un lenguaje terrible con un futuro brillante
  • ¿Por qué JavaScript todavía chupa
  • Un pequeño blog de código sobre ese lenguaje que amamos a pesar de darnos tanto que odiar
  • Jardín de JavaScript
  • JavaScript Gotchas
  • Errores comunes de JavaScript

Y eso es sólo los primeros resultados de búsqueda.

El hecho es que JavaScript tiene una semántica horriblemente dañada que resulta en numerosos WAT y WTF. Es por eso que el lenguaje ha sido, y sigue siendo , la colilla de tantas bromas.

ECMA TC39 ha hecho muy poco, en todo caso, para corregir estas semánticas rotas. Simplemente siguen agregando nuevas características después de nuevas características en ES5.1, ES6, ES7 y ES8. En esencia, están poniendo pintalabios en un cerdo.

La primera vez que me convertí en desarrollador web fue alrededor de 1999. En aquel entonces, Javascript funcionaba de manera ligeramente diferente en diferentes navegadores, en mayor medida que en la actualidad.

Es posible que el lenguaje en sí no haya variado demasiado, pero el modelo de objetos proporcionado por los navegadores para manipular y consultar HTML varió un poco.

Así que Javascript tenía una mala reputación, pero fue aceptado como un mal necesario.

Tal vez parte de la aversión a Javascript es un problema de los viejos tiempos.

También es cierto que la sintaxis de Javascript no es muy elegante en comparación con otros idiomas. A veces se vuelve extrañamente complejo, y crear objetos es un negocio extraño, aunque esto está configurado para cambiar.

No espera comenzar a usar un lenguaje interpretado de tipo dinámico como Javascript y encontrarse con complejidades que rivalizan con el tipo de cosas que podría encontrar al definir clases de plantillas en C ++, pero eso es lo que sucede con frecuencia.

Cualquier pregunta que haga “Por qué” es siempre una propuesta escurridiza, porque el universo parece no tener “primera causa”. En consecuencia, cualquier causalidad se atribuye por la primera pregunta de “por qué” sugiere inmediatamente otra pregunta de “por qué” para el agente causal: ¿Por qué A? Bien por B. Bien, entonces ¿por qué B? … Y así sucesivamente hasta el infinito.

Hay una discusión interesante de estos (y relacionados) conceptos filosóficos resbaladizos aquí:

Tortugas hasta el fondo – Wikipedia

En lo que respecta a JavaScript, hay que recordar que Brandon Eich (el creador de JavaScript) y su equipo se vieron sometidos a una enorme presión de tiempo. La leyenda dice que se les exigió tener un nuevo idioma operativo en menos de 6 semanas, o perder la oportunidad de tener un estándar. idioma del navegador en absoluto. Se alcanzó la fecha límite, con una implementación de JavaScript “exitosa”, pero no sin un lenguaje resultante que tiene más (quizás mucho más ) que su parte de peculiaridades, molestias, rarezas y problemas descarados “no intuitivos”.

Indiscutiblemente, en nuestro mundo existen lenguajes dinámicos más elegantes, compactos y generalmente más efectivos que JavaScript (Ruby viene a la mente). Sin embargo, ciertamente no hay una CPL que tenga un despliegue más amplio: cada instancia de navegador comercial en la creación, un número que sin duda se acerca a mil millones de instancias, si no más, tiene un despliegue de lenguaje JavaScript incorporado incorporado. Solo ese número debería darles una pausa a los que odian, y algunos motivos para aprender un poco sobre JS, y para cultivar algo de poder para lidiar con eso, incluso si es (según sus luces, no el mío) algo que debe ser despreciado.

Realmente no es tan malo. Recomiendo apegarse a las partes buenas de JS, a saber:

https://www.amazon.com/JavaScrip

¿Por qué tanta gente odia PHP? Perl? DO#? ¿Pitón? Cobol? ¿Ceceo? ¿Java? ¿Fortran? ¿BASIC? Scala? ¿Rubí? … A la gente simplemente no le gustan las cosas, por la razón que sea. No tienen el propósito del lenguaje y cómo usar esas peculiaridades para resolver ciertos problemas de una mejor manera.

La gente se basó en PHP, pero algunos de los proyectos más populares de la tierra se construyeron en PHP (Facebook, Slack, WordPress …). Javascript es el primer idioma que tenía una biblioteca principal que realmente usa CQRS / ES (imho). Creo que eso es muy bueno.

Algunos problemas se pueden expresar mejor con PHP, en lugar de un lenguaje más moderno como Java o C #. Algunos problemas se resuelven más sucintamente con Scala que con Lisp, y viceversa. A veces no tienes elección, a veces lo haces. Es en esos momentos en que puede elegir, que debe conocer tantos idiomas como sea posible, para tomar la mejor decisión. Pero si no lo hace, también está bien, escríbalo en lo que sabe y vuelva a escribirlo en un idioma que desee aprender.

Conocí a muchos desarrolladores y mi Javascript es también uno de mis idiomas favoritos, pero no para lo que crees que es.

Primero Javascript es muy antiguo. Cuando comencé a programar hace años, aprendí Javascript. Javascript fue realmente simple y agradable de usar.

Javascript ha hecho muchos progresos desde entonces. Pero la mayoría de la gente usa javascript incorrectamente.

Antes de Jquery, era realmente impopular. Porque no fue realmente óptimo como hoy. De hecho, mucha gente recuerda jquery pero hubo Prototype, YUI que realmente hacen una competencia feroz, pero jQuery ha ganado.

JQuery ha permitido el uso excepcionalmente fácil de la animación y algunos componentes. Trate de crear un sistema de tablas desde cero, fue un gran dolor en el culo y el lado del servidor fue mucho más fácil para eso.

NodeJS viene y Javascript se dispara realmente desde aquí.

Ahora tenemos un marco del lado del cliente como angular, reaccionar, … Javascript está aquí para quedarse. No hay alternativa ya que es el único idioma para el navegador.

Verás este tipo de desarrolladores:

  • Desarrollador del compilador : el tipo que usa la mayoría de las veces, Java, C ++, C #, … y así prefiere la programación de tipo Strong. Javascript carece de sentido de tipo y, a veces, Javascript no es tan lógico como este lenguaje. Algún ejemplo puede disgustar a los desarrolladores: wtf.js.

    Es por eso que crearon Typescript.

  • Desarrollador de servidor / back-end : no tienen tiempo para aprender tanto el idioma del servidor como el de front-end. A ellos no les gusta Javascript como desarrollador de compiladores, pero puedes verlos preguntarse por qué tienes un lenguaje de usuario cuando puedes hacer todo en el servidor.

    Primero, no creo que, en el pasado, fuera una necesidad (esta es la web 2.0) porque el lado del cliente era lento y no queríamos cargar demasiado en el lado del cliente. Pero el tiempo como cambio, con marco como angular, Reacción, …, sabemos cambiar la interfaz de usuario interactiva al lado frontal en lugar del lado del servidor. Así que puedes decir que no les gusta que el front-end robe estas partes del trabajo. Lo que es el punto de tener un negocio del lado del servidor, en mi opinión, nunca ha sido tener una lógica de UI, lo hicimos porque no tenemos otra opción, ahora lo tenemos. Solo verifique cómo funcionan las aplicaciones de escritorio y los videojuegos y verá que esta lógica debe, debería, siempre ha sido así. Imagina que intentas descargar 60 imágenes por segundo para un videojuego multiplicado por el número de usuarios de Steam …

  • Programador de aspectos : personas a las que les gusta la sintaxis limpia, la sintaxis de alfabetización como Ruby o Python. No les gusta Javascript porque la sintaxis no es legible. Y solo puedo estar de acuerdo con ellos. Es por eso que han creado Coffeescript en primer lugar.
  • En general
  • Ya que necesitamos tener más de 10 dependencias, especialmente en el front-end, es muy complicado.
  • Demasiada biblioteca, ahora tienen más de 1 biblioteca para hacer lo mismo
  • Nodo JS es un hilo
  • Siempre hay un nuevo marco cada 3 meses.

Javascript es genial de alguna manera, pero al mismo tiempo, es un dolor el culo para usar. Verifique, por ejemplo, los puestos de trabajo de desarrollo web y verá que se ha vuelto loco. Pero me gusta, no el lenguaje sino más el motor de Javascript. Hice WPF, Sitio web, Java swing, móvil, … Muchos tipos diferentes de desarrollo de IU en diferentes idiomas. Y puedo decir que Javascript es la única tecnología que es realmente multiplataforma con una hermosa interfaz de usuario gracias al desarrollo web.

Y lo peor de todo eso, es que todo el mundo usa Javascript como un lenguaje funcional o de tipo fuerte como Java cuando es claramente un lenguaje de objetos como ruby ​​(significa que todo es objeto).

Este tema es bastante común. Así que voy a dejar un enlace donde puedes leer por qué se odia el javascript entre muchos desarrolladores.

¿Por qué Javascript chupa. De alguien que lo ama. – Chris Simmons – Medio

JavaScript es un lenguaje de programación disfuncional – JavaScript no Grata – Medio

¿Y deberías cambiar a otro idioma?
La respuesta es No. Javascript podría ser amado u odiado, pero este es uno de los idiomas más esenciales para aprender. Puede crear casi cualquier cosa con javascript sin importar la plataforma o el tipo de aplicación (también conocido como: web, móvil, escritorio)
Además, aprender un nuevo idioma es bastante fácil, así que siempre puedes aprender un lenguaje como python, ve más tarde.

A todos estos idiotas que dicen que no hay manera de hacer javascript modular. Me gusta concurrir. Construí esto: chatdimension.com. Tiene unas 50 líneas de html. El resto se crea dinámicamente utilizando JavaScript. y está construido a partir de muchos archivos javascript separados que trato como archivos de clase en C #.

Así fue como logré construir algo tan complicado.

La forma simple de hacer esto es simplemente cargar los scripts en orden de dependencias con etiquetas de script.

Una forma más complicada que adopté es crear un código en el back-end que, cuando se inicia la aplicación web o cuando uso una página secreta para decirle al servidor que la rehaga, abre todos los archivos javascript y coloca el contenido en el orden especificado. de dependencias en una sola cadena, luego envía el contenido a una API de Google que lo confunde, luego lo coloca en un archivo de nombre aleatorio que sirve a los clientes.

Otra cosa. Si estas construyendo algo complicado. No escriba ningún html excepto para importar los scripts y las metaetiquetas. Hacer todo con javascript. De esa manera, ya tiene los elementos dom en el ámbito correcto dentro de sus objetos javascript. Puedes hacerlo bien así como lo he hecho yo.

Cada vez que creo una función para usar con la nueva palabra clave, y tengo un visual, le doy un div usando la palabra clave this. this.div = document.createElement (‘div’); También siempre creo una instancia de esta var self = this, para acceder a las funciones anidadas cuando necesito manipular los elementos dom asociados con la función que se usa con la nueva palabra clave. Luego, secuencialmente, creo los otros elementos y los agrego uno al otro. Después de crear una instancia con la nueva palabra clave. Le agrego el div al padre como agregar un UserControl:

parentElement.appendChild (myInstance.div);

Siempre siga estos patrones.

El hecho de que pueda llamar a una función por su nombre, crear objetos de diferentes maneras, con una nueva palabra clave o simplemente declarando el objeto var myObject = {disponible: ‘valor’, afunction: function () {}}, me parece increíblemente útil. Solo tienes que practicar y conseguir el truco. ¿Por qué la gente dice que tener múltiples formas de hacer lo mismo es malo? No lo es, y lo encuentro muy útil.

El hecho de que sea tan fácil agregar código sobre la marcha y analizar las funciones es genial. Me recuerda a Action and Func en C #, y delegados y expresiones lambda.

En lugar de simplemente usar las bibliotecas de otros pueblos para hacer todo. Construye tu propio. Creo que mucha gente piensa en JavaScript como algo plano y funcional. Solo algo para manipular el dom de manera realmente simple. NO ES EL PENSAMIENTO Puedes usarlo para construir módulos complicados como cualquier otro lenguaje de programación.

Casey Rodarmor, para llamarlo Miserable: ” JavaScript es un lenguaje de programación miserable” muestra que no aprecias lo bueno que es el lenguaje. Fuera de Java, C #, C ++, Javascript, Python. Elijo JavaScript como mi favorito.

No estoy seguro de estar de acuerdo con cualquiera de estas respuestas. Aunque no es exactamente un lenguaje nuevo, en la escala de programación, JavaScript no es muy antiguo. Sin embargo, la razón principal por la que JavaScript tiene una mala reputación es que hasta aproximadamente el 2012, cuando ES5 comenzó a convertirse en la corriente principal, con un buen soporte de navegador, JavaScript era un lenguaje bastante terrible. Dejame explicar.

Antes de 2012, utilizábamos bibliotecas como jQuery para que tuviera algún sentido, lo que producía una gran sobrecarga. Node.js no se había retirado, por lo que la mayoría aún era la parte frontal, lo que significa que los programadores tradicionales lo odiaban por su falta de coherencia, escritura holgada y muchas características faltantes, que la mayoría de los lenguajes de servidor han tenido durante más de 20 años. Esto significaba que a los desarrolladores de “back-end” no les gustaba escribir JS y, por lo tanto, a menudo se dejaba en manos de los desarrolladores de “front-end”, que tradicionalmente eran diseñadores que podían escribir y marcar el estilo. Un largo camino de la programación tradicional.

En años más recientes, con la introducción de ES6 y herramientas como TypeScript, JavaScript ahora tiene muchas de las características de un lenguaje tradicional, y se ha hecho mucho más consistente y más fácil de escribir. Todavía no ha llegado a ese punto con su reputación, ya que estas cosas llevan tiempo, pero dale unos años y creo que comenzarás a ver un cambio.

Eso sí, ha sido recogido por la comunidad “inconformista” más recientemente, así que ¡quién sabe qué hará eso por su reputación callejera!