¿Qué es realmente JavaScript?

95

Todo esto comenzó cuando estaba buscando una forma de probar la conformidad de JavaScript en mi página web, como el Validador HTML W3C . No he encontrado uno todavía. Hazme saber si sabes de alguna ...

  1. Busqué la página oficial de JavaScript y encontré ECMA Script . Estas personas han estandarizado un lenguaje de secuencias de comandos (¡ya no tengo ganas de llamarlo JavaScript!) Y lo llamaron ECMA-262 ( Wikipedia ). Su último trabajo es la Edición 5.1

  2. JavaScript fue desarrollado por Mozilla Corporation y su última versión estable es 1.8.5 ( ver esto ) que se basa en la edición 5.1 de ECMA

  3. La página de Wikipedia vinculada menciona dialectos. JavaScript 1.8.5 de Mozilla aparece como un dialecto junto con JScript 9 (IE) y JavaScript ( V8 de Chrome [ Wiki ]) y muchos otros. ¿Debo entender que JavaScript 1.8.5 es un derivado del ECMA-262 y SpiderMonkey [ Wiki ] es un motor que lo ejecuta? ¿Y Chrome tiene su propio dialecto y el motor V8 es el programa que lo ejecuta?

Con todos estos dialectos basados ​​en ECMA-262, lo que ya no puedo entender es "¿Qué es JavaScript "? ¿Hay algún lenguaje de script de navegador cruzado? ¿Los diferentes implementadores se unen para acordar la compatibilidad cruzada del dialecto? ¿Es este esfuerzo ECMA?

Lord Loh
fuente
10
Olvidó mencionar ActionScript, que es un dialecto ECMA que no tiene nada que ver con lo que podría llamar Javascript.
DaveRandom
44
No tanto para la conformidad (como ya ha resaltado), pero jslint es bastante bueno para verificar el código.
SomeKittens
2
@MadaraUchiha - Estoy de acuerdo "solo use jQuery. Todo estará bien". No estará bien. Por eso empecé a investigar esto. Mi sitio bharath.lohray.com funciona bien en Chrome y Firefox y el validador W3C tampoco genera ningún error, ¡pero apesta a lo grande en el nuevo IE! Además, por mucho que me guste la idea de la gente en anybrowser.org/campaign , ¡no puedo ser realmente un navegador cruzado!
Lord Loh
77
Acerca de su página, el desplazamiento es muy molesto y exagerado. Solo OMI. Y el título de "Señor" suena pomposo como el infierno, incluso si en realidad eres un Señor.
NullUserException
11
Es innecesariamente llamativo. No ves publicaciones deslizándose hacia arriba y hacia abajo en SE. Si está destinado a ser un sitio web de aspecto profesional y aún desea transiciones, use algo más discreto como un fundido de entrada / salida.
NullUserException

Respuestas:

96

Casi todos los lenguajes maduros están definidos por una especificación, y los compiladores o intérpretes intentan seguir el estándar definido en esa especificación. Pero muy raramente tienen éxito, a menos que el autor del lenguaje defina el estándar.

Puede encontrar el estándar C ++ 2003 , la especificación C # 4 , la especificación Java 7 y muchos más en línea. Muchos de estos tienen números de estandarización ECMA o ISO. Estas son solo organizaciones con las que puede registrar un estándar y hacerlo más oficial.

Históricamente, Ruby ha hecho las cosas de manera un poco diferente, teniendo un conjunto ejecutable de pruebas como especificación . Entonces, si desea escribir un intérprete y llamarlo Ruby estándar, solo tenía que crear un intérprete que pasara todas esas pruebas. Pero incluso Ruby es probable que se convierta en una especificación más formal con el tiempo.

Javascript no es diferente, excepto posiblemente en la forma en que ha evolucionado.

Javascript fue creado por primera vez por Netscape. Lo llamaron LiveScript, pero se parecía a Java y llegaron a un acuerdo con Sun por el nombre, lo que benefició tanto a la comercialización de Netscape como a Java. Microsoft tenía VBScript y (por razones probablemente perdidas por conjeturas) básicamente copió Javascript, pero el nombre era propiedad de Sun, por lo que descaradamente lo llamaron JScript.

Pero JScript, aunque era muy similar a Javascript en la sintaxis, hizo un gran uso de COM, por ejemplo, IE5 y 6 instanciaron un objeto XMLHttpRequest usando new ActiveXObject("Microsoft.XMLHTTP");.

Y así, nacieron paralelos, similares pero también diferentes "dialectos" de Javascript. Con el tiempo, varios grupos que poseen navegadores con menos participación de mercado que IE han intentado estandarizar el idioma, y ​​durante años Microsoft se resistió. Hasta V8.

V8 fue rápido. Estableció un nuevo estándar de mercado. Hizo que todo lo demás pareciera pobre.

Y, a través de varios casos antimonopolio contra Microsoft, IE estaba perdiendo participación de mercado. De repente, a Microsoft le interesaba apoyar la estandarización. Todavía no estamos allí, pero está en el camino correcto.

Mientras tanto, V8 era de código abierto, lo que permitió a la gente a empezar a pensar nuevos usos para un analizador Javascript rápido, como Node.JS .

Pero, para volver a su pregunta: ¿Qué es Javascript? Es el nombre común (y original) de ECMAScript, una especificación para un lenguaje prototípico que se usa comúnmente, pero no exclusivamente, para navegar y manipular el modelo de objeto de dominio en una ventana.

ECMA-262 es solo la definición estándar, como ECMA-334 es la definición estándar para C #. ECMAScript fue el único nombre en el que todas las partes interesadas podían ponerse de acuerdo, en el '99, cuando se escribió ECMA-262.

pdr
fuente
77
Si pudiera votar su respuesta más de una vez, lo habría hecho :-) Esto ayuda a aclarar algunas cosas. La analogía de los compiladores de C hace que la situación sea un poco comprensible :-) Excepto que JavaScript no se compila en binario y los usuarios finales ven scripts no / cuasi-funcionales. ¿Debo entender que no puedo construir una página con un estándar y espero que funcione en todos los navegadores de la misma manera? (aún siendo la palabra operativa).
Lord Loh
1
@LordLoh. Eso es correcto. Pero puede permitir que bibliotecas como jQuery y Prototype abstraigan las diferencias por usted.
pdr
Esta publicación y la investigación comenzaron cuando la animación jQuery no funcionaba en IE9 y mentí sobre la idea de la campaña anybrowser.org y esperaba poder seguir un estándar. HTML5 / CSS3 / JS. El JS terminó como el error en mi capó.
Lord Loh
1
@LordLoh. No estaría tan seguro de que sea culpa de jQuery. Solo un vistazo rápido muestra problemas con su HTML (citas faltantes, por ejemplo) y cuando minimiza su Javascript de esa manera, puede haber resultados extraños si no ha sido muy preciso. Recuerdo un problema hace mucho tiempo en el que me había perdido un punto y coma y solo falló después de la compresión en uno de los principales navegadores. jQuery es bastante estable y debería funcionar bien con IE9.
pdr
55
@LordLoh. console.log es tu problema. No funciona a menos que abra la barra de herramientas del desarrollador (y así cree la "consola" de objetos).
pdr
23

Javascript es una implementación comúnmente utilizada de ECMAScript. Es una situación muy similar a la familia Scheme . En Scheme, tiene una especificación altamente formalizada. La versión actual es R6RS, aunque R5RS es, con mucho, el estándar más comúnmente implementado a partir de esta publicación. Las implementaciones están más dispersas que las de ECMAScript debido a la edad y las filosofías generales de Scheme.

Javascript es común ahora en gran parte debido al crecimiento explosivo en la participación de mercado tanto de Firefox de Mozilla como de Chrome de Google. Originalmente se estableció con Netscape Navigator, que finalmente se convirtió en el navegador Mozilla y luego en Firefox (y Iceweasel si corres con la multitud de Scheme).

Ahora aquí es donde se pone un poco incierto. La mayor parte del rendimiento de Javascript proviene del analizador y el motor que lo ejecuta. Aquí es donde las diferencias reales entre los navegadores se hacen evidentes. Spidermonkey ejecuta Javascript de manera diferente que V8. Javascript todavía tiene puntos difíciles como la falta de una biblioteca completamente común, aunque eso se está trabajando.

Entonces, si Javascript fuera C ++, entonces ECMAScript sería el C ++ 11, con UNIX y G ++ siendo el más cercano al "estándar", mientras que C ++ para .NET y Objective C ++ se encuentran mucho más lejos en la forma en que Actionscript lo hace desde ECMAScript

Ingeniero mundial
fuente