JavaScript | |
---|---|
clase de idioma |
multi- paradigma : orientado a objetos ( prototípico ), generalizado , funcional , imperativo , orientado a aspectos , programación dirigida por eventos |
tipo de ejecución | interpretación, traducción a bytecode de Java [ 1] , JIT a código nativo [2] |
Apareció en | 1995 |
Autor | Brendan Eich |
extensión de archivo | .js, .cjs, .mjs[Спецификация 1] |
Liberar | ECMAScript 2022 [3] (junio de 2022 ) |
sistema de tipos | dinámico , pato |
Implementaciones principales | SpiderMonkey , Rhino , KJS (JavaScript) , JavaScriptCore , V8 |
sido influenciado | Lua , Self [4] , C , Esquema [4] , Perl [4] , Python , Java [4] , AWK [4] , HyperTalk [4] |
influenciado | Objetivo-J , Dardo , Mecanografiado |
Archivos multimedia en Wikimedia Commons |
JavaScript | |
---|---|
Extensión | .js[7] |
tipo MIME | texto/javascript, aplicación/javascript [5] [6] |
publicado | septiembre de 1995 [8] |
Tipo de formato | archivo de texto con código fuente |
Expandido desde | ECMAScript |
Archivos multimedia en Wikimedia Commons |
JavaScript ( / ˈ dʒ ɑː v ɑː ˌ s k r ɪ p t / ; abbr. JS /ˈdʒeɪ.ɛs./ ) es un lenguaje de programación multiparadigma . Admite estilos orientados a objetos , imperativos y funcionales . Es una implementación de la especificación ECMAScript (estándar ECMA-262 [9] ).
JavaScript se usa comúnmente como un lenguaje integrable para el acceso programático a los objetos de la aplicación . Es más ampliamente utilizado en navegadores como lenguaje de secuencias de comandos para hacer que las páginas web sean interactivas [10] .
Principales características arquitectónicas: escritura dinámica , escritura débil , administración automática de memoria , programación prototípica , funciones como objetos de primera clase .
JavaScript ha sido influenciado por muchos lenguajes, y el objetivo era hacer que el lenguaje fuera similar a Java. JavaScript no es propiedad de ninguna empresa u organización, lo que lo distingue de una serie de lenguajes de programación utilizados en el desarrollo web [~ 1] [11] .
El nombre "JavaScript" es una marca comercial registrada en EE. UU. de Oracle Corporation [12] .
En 1992, Nombas ( posteriormente adquirida por Openwave ) comenzó a desarrollar un lenguaje de secuencias de comandos integrable Cmm (C-menos-menos), que, según los desarrolladores, se suponía que era lo suficientemente potente como para reemplazar macros , manteniendo la similitud con C , para que los desarrolladores puedan aprenderlo fácilmente [13] . La principal diferencia con C era el manejo de la memoria. En el nuevo lenguaje, toda la gestión de la memoria se realizaba automáticamente: no era necesario crear búferes , declarar variables ni realizar conversiones de tipos. En otros aspectos, los lenguajes eran muy similares entre sí: en particular, Cmm admitía funciones estándar y operadores C [14] . Cmm pasó a llamarse ScriptEase porque el nombre original sonaba demasiado negativo y la mención de C en él "asustaba" a la gente [13] [15] . En base a este lenguaje se creó el producto propietario CEnvi . A fines de noviembre de 1995, Nombas desarrolló una versión de CEnvi que se integra en las páginas web. Las páginas que podían modificarse usando el lenguaje de secuencias de comandos se denominaron Espresso Pages , que demostraron el uso del lenguaje de secuencias de comandos para crear un juego, validar la entrada del usuario en formularios y crear animaciones. Espresso Pages se posicionó como una demostración para ayudar a imaginar lo que sucedería si se implementara el lenguaje Cmm en el navegador . Solo funcionaban en Netscape Navigator de 16 bits bajo Windows [16] .
La primera implementación de JavaScript fue creada por Brendan Eich en Netscape y desde entonces ha sido actualizada para cumplir con ECMA-262 Edición 5 y posteriores. Este motor se llama SpiderMonkey y está implementado en C/ C++ . El motor Rhino fue creado por Norris Boyd e implementado en Java. Al igual que SpiderMonkey , Rhino cumple con ECMA-262 Edición 5.
A Brendan Eich , contratado por Netscape el 4 de abril de 1995 [18] , se le encargó llevar el lenguaje de programación Scheme , o algo similar, al navegador de Netscape. Como los requisitos se volvieron borrosos, Eich fue trasladado al grupo de Productos de servidor, donde pasó un mes trabajando en la mejora del protocolo HTTP [18] . En mayo, el desarrollador fue transferido nuevamente al equipo del lado del cliente (navegador), donde inmediatamente comenzó a desarrollar el concepto de un nuevo lenguaje de programación. La gerencia de desarrollo del navegador, incluidos Tom Paquin , Michael Toy , Rick Schell , estaban convencidos de que Netscape debería admitir un lenguaje de programación incrustado en el código HTML de la página [ 19 ] .
Además de Brendan Eich, [18 ] el cofundador de Netscape Communications [20] Mark Andressen y el cofundador de Sun Microsystems , Bill Joy , participaron en el desarrollo : para tener tiempo de terminar el trabajo en el lenguaje para el lanzamiento del navegador . , las empresas celebraron un acuerdo de cooperación para el desarrollo [21] . Se fijaron el objetivo de proporcionar un "lenguaje para pegar" las partes constitutivas de un recurso web: imágenes, complementos, applets de Java, lo que sería conveniente para los diseñadores y programadores web que no tienen altas calificaciones [18] .
El lenguaje se llamó originalmente Mocha [23] [24] [25] por sugerencia de Mark Andreessen [22] , Brendan Eich lo implementó en diez días y se incluyó por primera vez en la versión prealfa de Netscape 2 [22] . Luego pasó a llamarse LiveScript [25] [26] y estaba destinado tanto a la programación del lado del cliente como a la programación del lado del servidor (donde se llamaría LiveWire) [21] . La sintaxis fue influenciada por los lenguajes C y Java , y dado que Java era una palabra de moda en ese momento [18] [21] , LiveScript pasó a llamarse JavaScript [27] el 4 de diciembre de 1995, con licencia de Sun. El anuncio de JavaScript por parte de los representantes de Netscape y Sun tuvo lugar la víspera del lanzamiento de la segunda versión beta de Netscape Navigator [18] . Declara que 28 empresas de TI líderes han expresado su intención de utilizar JavaScript como un lenguaje de secuencias de comandos de objetos estándar abierto en sus productos futuros [28] .
En 1996, Microsoft lanzó un análogo del lenguaje JavaScript llamado JScript . Este lenguaje fue anunciado el 18 de julio de 1996 [29] . El primer navegador que admitió esta implementación fue Internet Explorer 3.0.
Por iniciativa de Netscape [30] [31] , el lenguaje fue estandarizado por la asociación ECMA . La versión estandarizada se llama ECMAScript , descrita por el estándar ECMA-262 . La primera versión de la especificación correspondía a la versión 1.1 de JavaScript, así como a los lenguajes JScript y ScriptEasy [13] [21] .
En El lenguaje de programación más incomprendido del mundo se ha convertido en el lenguaje de programación más popular del mundo [ 32] , Douglas Crockford argumenta que la posición de liderazgo que ha tomado JavaScript se debe al desarrollo de AJAX , ya que el navegador se ha convertido en el sistema predominante de entrega de aplicaciones. También señala la creciente popularidad de JavaScript, el hecho de que este lenguaje esté integrado en las aplicaciones, enfatiza la importancia del lenguaje.
Según el Índice TIOBE , basado en Google , MSN , Yahoo! , Wikipedia y YouTube , en abril de 2015, JavaScript ocupaba el sexto lugar (hace un año, ocupaba el noveno lugar) [33] .
Según Black Duck Software [34] , el uso de JavaScript ha ido en aumento en el desarrollo de software de código abierto . El 36% de los proyectos lanzados entre agosto de 2008 y agosto de 2009 involucran JavaScript, el lenguaje de programación más utilizado con una popularidad en rápido crecimiento. El 80 % del software de código abierto utiliza C, C++, Java, Shell y JavaScript. Sin embargo, JavaScript es el único de estos lenguajes cuya cuota de uso ha aumentado (más del 2 por ciento, si se cuenta en líneas de código) [35] .
JavaScript es el lenguaje de programación más popular utilizado para desarrollar aplicaciones web del lado del cliente [36] [37] .
JavaScript es un lenguaje orientado a objetos , pero la creación de prototipos utilizada en el lenguaje [38] [39] provoca diferencias en el trabajo con objetos en comparación con los lenguajes tradicionales orientados a clases. Además, JavaScript tiene una serie de propiedades inherentes a los lenguajes funcionales: funciones como objetos de primera clase , objetos como listas, curry , funciones anónimas , cierres [40] , lo que le da al lenguaje una flexibilidad adicional.
A pesar de la sintaxis similar a C, JavaScript tiene diferencias fundamentales en comparación con el lenguaje C :
El lenguaje carece de cosas tan útiles [41] como:
La sintaxis de JavaScript es muy parecida a la de C y Java , pero semánticamente , el lenguaje está mucho más cerca de Self , Smalltalk o incluso Lisp [32] [42] [Especificación 2] .
En JavaScript:
Estructuralmente, JavaScript se puede representar como una unión de tres partes distintas [43] [44] [45] [46] :
Al considerar JavaScript en entornos sin navegador, es posible que no se admitan el modelo de objetos del navegador y el modelo de objetos del documento [45] .
El modelo de objeto de documento a veces se considera una entidad separada de JavaScript [47] [48] [Especificación 3] , lo cual es consistente con la definición de DOM como una interfaz de documento independiente del lenguaje [49] [~ 3] . Por el contrario, varios autores encuentran que BOM y DOM están estrechamente relacionados [50] [51] .
NúcleoECMAScript no es un lenguaje de navegador y no define métodos de entrada y salida [43] . Es más bien la base para construir lenguajes de scripting. La especificación ECMAScript describe tipos de datos, instrucciones, palabras clave, palabras reservadas , operadores , objetos, expresiones regulares , sin restringir a los autores de lenguajes derivados de extenderlos con nuevos componentes.
Modelo de objetos del navegadorEl modelo de objetos del navegador es una parte específica del navegador del lenguaje [45] [52] que es una capa entre el núcleo y el modelo de objetos del documento [53] . El propósito principal del modelo de objetos del navegador es administrar e interactuar con las ventanas del navegador. Cada una de las ventanas del navegador está representada por un objeto window, el objeto DOM central. El modelo de objetos del navegador no está estandarizado actualmente [45] [54] , pero WHATWG [53] [Spec 4] y W3C [44] [Spec 5] están desarrollando una especificación .
Además de administrar ventanas, dentro del modelo de objetos del navegador, los navegadores generalmente brindan soporte para las siguientes entidades [53] [54] :
El modelo de objeto de documento es una interfaz de programación de aplicaciones para documentos HTML y XML [55] . Según DOM, un documento (por ejemplo, una página web) se puede representar como un árbol de objetos que tienen una serie de propiedades que le permiten realizar diversas manipulaciones con él:
Para agregar código JavaScript a una página, puede usar etiquetas <script></script>[Especificación 6] , que se recomiendan, pero no son obligatorias, colocadas dentro del archivo <head>. Puede haber cualquier número de contenedores <script>en un documento. El atributo type="text/javascript"es opcional, este valor se usa por defecto [56] .
Un script que muestra una ventana modal con la inscripción clásica "¡Hola, mundo!" dentro del navegador:
< tipo de script = "aplicación/javascript" > alerta ( '¡Hola, mundo!' ); </ guión >
La especificación HTML describe un conjunto de atributos utilizados para definir controladores de eventos [Especificación 7] . Ejemplo de uso:
< a href = "delete.php" onclick = "confirm('¿Estás seguro?'); return false;" > Borrar </a> _ _En el ejemplo anterior, al hacer clic en el enlace, la función confirm('Вы уверены?');abre una ventana modal con la inscripción "¿Estás seguro?", pero return false;bloquea la transición al enlace. Por supuesto, este código solo funcionará si el navegador tiene habilitado el soporte de JavaScript, de lo contrario, se seguirá el enlace sin previo aviso.
El uso de código JavaScript en el contexto del marcado de páginas se considera una mala práctica dentro de JavaScript discreto . Analógico (siempre que el enlace se proporcione con un identificador alertLink)
<a id="enlace de alerta"> _ _ _ _ Borrar </a> _ _El ejemplo anterior podría ser, por ejemplo, el siguiente fragmento de JavaScript:
ventana _ onload = () => { const linkWithAlert = documento . getElementById ( 'enlace de alerta' ); enlaceConAlerta . addEventListener ( 'clic' , async () => { if ( confirmar ( '¿Está seguro?' )) { await fetch ( 'delete' , { method : 'DELETE' }) } }) }; Mover a un archivo separadoHay una tercera forma de conectar JavaScript: escriba un script en un archivo separado y luego conéctelo usando la construcción
< cuerpo > < tipo de script = "aplicación/javascript" src = "http://Ruta_al_archivo_coscript" > </ script > </ cuerpo > Atributos del elemento scriptEl elemento script, muy utilizado para conectarse a una página de JavaScript, tiene varios atributos.
La propuesta de trabajo RFC-4329 que define [57] un tipo MIME conforme a los estados de JavaScript :
tipos de medios
que también se definen en este documento están destinados a un uso práctico y deben preferirse.
Texto original (inglés)[ mostrarocultar] Se sabe que el uso del tipo de nivel superior "texto" para este tipo de contenido es problemático. Este documento así los define text/javascripty text/ecmascriptlos marca como "obsoletos". Se desaconseja el uso de tipos de medios experimentales y no registrados, como se indica en la parte anterior.los tipos de medios,
Al mismo tiempo, el language="JavaScript"atributo idioma ( ), a pesar de su uso activo (en 2008, este atributo fue el atributo más utilizado para la etiqueta <script>[58] ), está en desuso, no está en la DTD y, por lo tanto, se considera incorrecto [ 59] .
JavaScript se utiliza en el lado del cliente de las aplicaciones web: programas cliente-servidor en los que el navegador es el cliente y el servidor web es el servidor, con una lógica distribuida entre el servidor y el cliente. El intercambio de información en las aplicaciones web se realiza a través de la red. Una ventaja de este enfoque es el hecho de que los clientes son independientes del sistema operativo particular del usuario, por lo que las aplicaciones web son servicios multiplataforma.
AJAXJavaScript se utiliza en AJAX , un enfoque popular para crear interfaces de usuario interactivas para aplicaciones web que implica una comunicación asíncrona "de fondo" entre el navegador y el servidor web. Como resultado, al actualizar los datos, la página web no se recarga por completo y la interfaz de la aplicación web se vuelve más rápida de lo que sería con el enfoque tradicional (sin usar AJAX).
CometaComet es un concepto amplio que describe cómo funcionan las aplicaciones web mediante conexiones HTTP persistentes, lo que permite que un servidor web envíe datos a un navegador sin ninguna solicitud adicional del navegador. Estas aplicaciones utilizan tecnologías compatibles directamente con los navegadores. En particular, hacen un uso extensivo de JavaScript.
Navegadores de sistemas operativosJavaScript es ampliamente utilizado en los sistemas operativos de los navegadores . Entonces, por ejemplo, el código fuente de IndraDesktop WebOS es 75% JavaScript, el código del sistema operativo del navegador IntOS es 70%. La participación de JavaScript en el código fuente de eyeOS es del 5%, sin embargo, incluso dentro de este sistema operativo, JavaScript juega un papel importante, participando en la representación en el cliente y siendo un mecanismo necesario para la comunicación entre el cliente y el servidor [60]. ] .
JavaScript se utiliza para crear pequeños programas que se marcan en el navegador. Esto utiliza direcciones URL con el especificador javascript:[61] .
Los scripts de usuario del navegador son programas de JavaScript que se ejecutan en el navegador del usuario cuando se carga una página. Le permiten completar formularios automáticamente, reformatear páginas, ocultar contenido no deseado e incrustar contenido que desea mostrar, cambiar el comportamiento del lado del cliente de las aplicaciones web, agregar controles a la página, etc.
Mozilla Firefox usa la extensión Greasemonkey para administrar las secuencias de comandos de los usuarios ; Opera [62] [63] [64] y Google Chrome [65] brindan soporte para scripts de usuario y la capacidad de ejecutar varios scripts de Greasemonkey.
Las aplicaciones escritas en JavaScript pueden ejecutarse en servidores que ejecuten Java 6 y versiones posteriores [66] . Esta circunstancia se utiliza para crear aplicaciones de servidor que permiten procesar JavaScript en el lado del servidor.
Además de Java 6, hay una serie de plataformas que utilizan motores JavaScript existentes (intérpretes) para ejecutar aplicaciones de servidor. (Por regla general, estamos hablando de reutilizar motores creados previamente para ejecutar código JavaScript en navegadores WWW).
Marcos de ejecución de aplicaciones de servidor de JavaScriptNombre | Motor de JavaScript utilizado | Idiomas en los que están escritos el motor y la plataforma | Licencia |
---|---|---|---|
Jaxer [67] | Mono araña [68] | C++, C | GPL 3 [69] |
marco perseverante [70] | Rinoceronte | Java | Licencia BSD modificada [71] |
Helma [72] | Rinoceronte | Java, JavaScript | Licencia Helma 2.0 similar a BSD [73] |
v8cgi | V8 | C++, JavaScript | Licencia BSD [74] |
nodo.js | V8 | C++ | licencia MIT [75] |
gopherjs | Vamos | Vamos | licencia BSD |
JavaScript del lado del servidor se utiliza en los proyectos de Google [76] . Por ejemplo, Google Sites permite la personalización mediante scripts JavaScript ejecutados por el motor Rhino [77] .
La transición de los dispositivos móviles Palm para utilizar Palm webOS como sistema operativo con Mojo SDK como kit de desarrollo [78] permite que JavaScript se utilice como lenguaje de desarrollo de aplicaciones móviles [79] [80] .
Un widget es un miniprograma auxiliar, cuyo módulo gráfico se ubica en el espacio de trabajo del programa padre correspondiente , que sirve para decorar el espacio de trabajo, entretener, resolver tareas de trabajo individuales, u obtener información rápidamente de Internet sin utilizando un navegador web. JavaScript se usa tanto para implementar widgets como para implementar motores de widgets. En particular, Apple Dashboard , Microsoft Gadgets , Yahoo! Widgets , Google Gadgets , Klipfolio Dashboard .
JavaScript se utiliza para escribir software de aplicación . Por ejemplo, el 16,4 % del código fuente de Mozilla Firefox está escrito en JavaScript.
Google Chrome OS utiliza aplicaciones web como software de aplicación [81] .
El entorno de escritorio GNOME tiene la capacidad de crear programas JavaScript que operan en las bibliotecas GNOME usando Gjs , Seed [82] .
JavaScript también encuentra uso como lenguaje de secuencias de comandos para acceder a los objetos de la aplicación. La plataforma Mozilla ( XUL / Gecko ) utiliza JavaScript. Entre los productos de terceros, por ejemplo, Java ha incluido un intérprete de JavaScript integrado basado en Rhino desde la versión 6 [66] . Las secuencias de comandos de JavaScript son compatibles con aplicaciones de Adobe como Adobe Photoshop , Adobe Dreamweaver , Adobe Illustrator y Adobe InDesign .
JavaScript se usa en aplicaciones de oficina para automatizar acciones de rutina, escribir macros y organizar el acceso desde servicios web.
Microsoft OfficeExcel Services 2010 agregó [83] dos nuevas interfaces de programación de aplicaciones: la API REST y el modelo de objetos de JavaScript ( JSOM ).
JavaScript es uno de los lenguajes de programación utilizados para escribir macros en aplicaciones que forman parte de OpenOffice.org [85] . OpenOffice.org integra el intérprete JavaScript de Rhino [86] . En diciembre de 2009, la compatibilidad con JavaScript era limitada. Limitaciones inherentes a [86] el desarrollo de macros de OpenOffice.org en JavaScript:
OpenOffice.org tiene un editor y depurador de JavaScript [87] .
JavaScript tiene valor propedéutico , permitiendo una combinación de práctica de programación intensiva y la amplitud de las tecnologías utilizadas en la enseñanza de las ciencias de la computación [88] . Enseñar este lenguaje en la escuela te permite crear una base para aprender programación web , utilizar proyectos creativos en el aula [89] . El curso correspondiente le permite proporcionar un nivel profundo de estudio de la informática y tiene sentido incluirlo en cursos electivos de un nivel profundo de formación [90] .
JavaScript es un lenguaje adecuado para aprender a programar juegos . Comparado con las alternativas, es funcionalmente suficiente, fácil de aprender y usar, reduce la complejidad del aprendizaje, motiva a los alumnos a compartir sus juegos con otros [91] .
Partes sobre la implementación en JavaScript de algoritmos clásicos , técnicas, estructuras de datos , no incluidas en el libro de Nicholas Zakas "Professional JavaScript for Web Developers" , sirvieron [92] como el comienzo del proyecto Computación en JavaScript [~ 4] .
JavaScript | Versión de JScript correspondiente | Cambios significativos |
---|---|---|
1.0 ( Netscape 2.0, marzo de 1996) | 1.0 (versiones anteriores de IE 3.0, agosto de 1996) | La versión original del lenguaje JavaScript. |
1.1 (Netscape 3.0, agosto de 1996) | 2.0 (versiones posteriores de IE 3.0, enero de 1997) | En esta versión, se implementó el objeto Arrayy se corrigieron los errores más graves. |
1.2 (Netscape 4.0, junio de 1997) | Cambio implementado switch, expresiones regulares. Prácticamente traído de acuerdo con la primera edición de la especificación ECMA-262. | |
1.3 (Netscape 4.5, octubre de 1998) | 3.0 (IE 4.0, octubre de 1997) | Compatible con la primera edición de ECMA-262. |
1.4 (solo servidor Netscape) | 4.0 ( Visual Studio 6, sin versión de IE) | Se aplica únicamente a los productos de servidor de Netscape. |
5.0 (IE 5.0, marzo de 1999) | ||
5.1 (ES decir, 5.01) | ||
1.5 (Netscape 6.0, noviembre de 2000; también versiones posteriores de Netscape y Mozilla ) |
5.5 (IE 5.5, julio de 2000) | Revisión 3 (diciembre de 1999). Compatible con la tercera edición de la especificación ECMA-262. |
5.6 (IE 6.0, octubre de 2001) | ||
1.6 ( Gecko 1.8, Firefox 1.5, noviembre de 2005) | Revisión 3 con algunas mejoras compatibles: E4X , adiciones a Array(p . ej. Array.prototype.forEach), simplificaciones para Arrayy String[93] | |
1.7 (Gecko 1.8.1, Firefox 2.0, otoño de 2006), extensión de JavaScript 1.6 | Revisión 3, agregando todas las mejoras de JavaScript 1.6, generadores y comprensiones de listas de Python , alcances de bloques usando y desestructurando la asignación ( ) [ 94] . [a*a for (a in iter)]letvar [a, b] = [1, 2] | |
JScript .NET ( ASP.NET ; sin versión de IE) | (Se cree que JScript .NET se desarrolló con contribuciones de otros miembros de ECMA ) | |
1.8 (Gecko 1.9, Firefox 3.0, otoño de 2008), extensión de JavaScript 1.7 | Nueva notación para funciones similares a las expresiones lambda típicas , generadores , nuevos métodos para el procesamiento iterativo de matrices reduce()y reduceRight()[95] . | |
1.8.1 (Geco 1.9.1, Firefox 3.5) | Compatibilidad con JSON nativo, método getPrototypeOf()y , Objectmétodos y [96]trim()trimLeft()trimRight()String | |
2.0 | Revisión 4 (trabajo en progreso [97] , título reservado por ECMA pero no utilizado para publicación [Especificación 9] ) | |
Revisión 5 (anteriormente conocida como ECMAScript 3.1 [97] . Finalizada el 3 de diciembre de 2009 [98] [99] ). |
Para proporcionar un alto nivel de abstracción y lograr un grado aceptable de compatibilidad entre navegadores , se utilizan bibliotecas de JavaScript en el desarrollo de aplicaciones web. Son una colección de objetos y funciones reutilizables. Las bibliotecas JavaScript notables incluyen React.js , Vue.js , Ember.js , Adobe Spry , AngularJS , Svelte , Dojo , , jQuery , Mootools , Prototype , Qooxdoo y Underscore .
En JavaScript, el acceso a los depuradores se vuelve especialmente útil cuando se desarrollan programas grandes y no triviales debido a las diferencias en las implementaciones entre los navegadores (en particular con respecto al modelo de objeto del documento ). Muchos navegadores tienen un depurador incorporado.
Internet Explorer tiene tres depuradores: Microsoft Visual Studio es el más completo, seguido de Microsoft Script Editor (un componente de Microsoft Office [100] ), y finalmente el Microsoft Script Debugger gratuito, mucho más simple que los otros dos. El Microsoft Visual Web Developer Express gratuito proporciona una versión limitada con una función de depuración de JavaScript en Microsoft Visual Studio. En la octava versión de IE, junto con herramientas para desarrolladores, apareció un depurador incorporado.
Opera también tiene su propio depurador, Opera Dragonfly [101] .
Las aplicaciones web que desarrollas en Firefox se pueden depurar con las Herramientas de desarrollo de Firefox integradas.
Safari incluye el depurador JavaScript WebKit Web Inspector [102] . El mismo depurador también está disponible en otros navegadores que utilizan WebKit : Google Chrome, Arora , Rekonq , Midori , etc.
La mayoría de los marcos de prueba automatizados para el código JavaScript requieren que ejecute sus pruebas en el navegador. Esto se hace usando una página HTML que es el contexto de prueba , que a su vez carga todo lo necesario para realizar la prueba. Los primeros marcos de este tipo fueron JsUnit (creado en 2001), Selenium (creado en 2004) [103] . Una alternativa es ejecutar pruebas desde la línea de comandos. En este caso se utilizan entornos que no son de navegador como Rhino [104] . Una de las primeras herramientas de este tipo es Crosscheck, que permite probar código emulando el comportamiento de Internet Explorer 6 y Firefox versiones 1.0 y 1.5 [105] . Otro ejemplo de un marco de prueba automatizado para código JavaScript que no usa un navegador para ejecutar pruebas es la biblioteca env.js creada por John Resig. Utiliza Rhino y contiene la emulación del entorno del navegador y DOM [106] .
Blue Ridge, un complemento para el marco de aplicaciones web de Ruby on Rails , le permite realizar pruebas unitarias de código JavaScript tanto dentro como fuera del navegador. Esto se logra mediante el marco de prueba automatizado Screw.Unit y Rhino con env.js [107] .
El principal problema con los sistemas de prueba sin navegador es que utilizan emulaciones en lugar de los entornos reales en los que se ejecuta el código. Esto lleva al hecho de que pasar con éxito las pruebas no garantiza que el código funcione correctamente en el navegador [108] [109] . El problema de probar sistemas que utilizan un navegador es la complejidad de trabajar con ellos, la necesidad de realizar acciones rutinarias no automatizadas [110] . Para resolver esto, JsTestDriver, un marco de pruebas automatizado desarrollado por Google, utiliza un servidor que se comunica con los navegadores para realizar pruebas [111] . Selenium Remote Control, parte del marco de prueba automatizado de Selenium, se comporta de manera similar: incluye un servidor que inicia y detiene los navegadores y actúa como un proxy HTTP para las solicitudes [112] . Además, Selenium contiene Selenium Grid, que le permite probar simultáneamente el código JavaScript en diferentes computadoras con diferentes entornos, lo que reduce el tiempo de ejecución de la prueba [113] . Compatible con QUnit ( biblioteca jQuery ), UnitTestJS ( biblioteca Prototype ), JSSpec ( biblioteca MooTools ), JsUnit, Selenium y Dojo Objective Harness marcos de prueba automatizados de JavaScript, Testswarm es un soporte de integración continua distribuido [114] .
Una propiedad negativa que puede tener un marco de prueba de código JavaScript es la presencia de dependencias. Esto crea el riesgo de que el código bajo prueba que pasa las pruebas falle en un entorno que no tiene estas dependencias. Por ejemplo, la versión original de JsUnitTest, el marco creado y utilizado para probar la biblioteca Prototype, dependía de Prototype para cambiar las propiedades de los objetos en el ámbito global [115] . Incluir una herramienta de prueba en una biblioteca de JavaScript es una práctica común. Entonces YUI Test 3 es parte de Yahoo! UI Library y se puede usar de forma segura para probar código JavaScript arbitrario [116] . QUnit es un marco de prueba automatizado creado por los desarrolladores de jQuery [117] .
La estandarización de JavaScript requería que se evitaran los problemas de marcas registradas, por lo que el estándar ECMA 262 llama al lenguaje ECMAScript, del cual se han publicado tres revisiones desde que se comenzó a trabajar en él en noviembre de 1996.
Objective-J es un superconjunto estricto y compacto de JavaScript que se suma a JavaScript:
VBScript de Microsoft , como JavaScript, se puede ejecutar en el lado del cliente en las páginas web. VBScript tiene una sintaxis derivada de Visual Basic y solo se admite en Internet Explorer .
JSON , o notación de objetos de JavaScript, es un formato de intercambio de datos de propósito general definido como un subconjunto de JavaScript.
Scheme también es un lenguaje hermano de JavaScript porque ambos brindan funciones de programación ricas y funcionales: JavaScript es un lenguaje dinámico, admite matrices flexibles, puede simular fácilmente expresiones s y es compatible con expresiones lambda [118] .
JavaScript y JavaUn concepto erróneo común es que JavaScript es similar o está estrechamente relacionado con Java , no lo es [32] . Ambos lenguajes tienen una sintaxis similar a C, están orientados a objetos y tienden a usarse ampliamente en aplicaciones web del lado del cliente. Las diferencias importantes incluyen:
JavaScript implementa los intérpretes de varios lenguajes de programación, lo que hace posible utilizar un navegador web como tiempo de ejecución para ellos. Se pueden utilizar, por ejemplo, con fines educativos [119] .
HotRuby es una implementación gratuita de la máquina virtual Ruby en JavaScript y Flash . Le permite ejecutar bytecode resultante de la compilación YARV . Implementa la mayor parte de la gramática de Ruby. El mecanismo de excepción y la mayoría de las funciones y clases integradas aún no se han implementado [120] . Con HotRuby, puede usar scripts de Ruby en páginas web. Para hacer esto, el código ruby debe colocarse en un bloque:
< tipo de guión = "texto/rubí" > ... </ guión >HotRuby lo extraerá, lo enviará a un script remoto para su compilación y luego mostrará los resultados en la página [121] . Esta implementación permite el acceso desde Ruby a objetos JavaScript [122] .
Tabla de implementaciones de lenguajes de programación JavaScriptIdioma | Nombre de implementación | Principales autores | Licencia |
---|---|---|---|
JavaScript | s-señor [123] | Andrei Formiga | NuevoBSD |
posdata | MPS [124] | tom halavaty | ? |
Ensamblador para MOS Technology 6502 | 6502asm [125] | Stian Soreng | GPL |
Objetivo-J | capuchino [126] | ross boucher | LGPL |
Haskell | ycr2js [127] | Tom Shackell, Neil Mitchell, Andrew Wilkinson, Mike Dodds, Bob Davie, Dimitry Golubovsky | licencia permisiva simple |
Prólogo | Prólogo del juguete de Monash [128] | lloyd allison | ? |
ioctls [129] | ene subvención | ? | |
gato | Gato Intérprete [130] | Cristóbal Diggins | dominio publico |
Esquema | Esquema Biwa [131] | yutaka hara | MIT |
BÁSICO | Bastante BÁSICO [132] | Nikko Strom | propietario libre |
lirio_ | lirio [133] | Bill Orcutt | MIT |
Adelante | wAdelante [134] | jacobson | ? |
PHP | fisico [135] | ||
Pitón 3 | PyPy.js | ? | ? |
Oberón 07 | oberon [136] | Vlad Folts | MIT |
Algunos lenguajes de programación brindan soporte para interactuar con código JavaScript.
Hasta la fecha, el soporte de JavaScript lo proporcionan las versiones modernas de todos los navegadores más utilizados. Internet Explorer , Opera , Mozilla Firefox , Safari , Google Chrome tienen soporte completo para la 3ra edición ECMA-262. Al mismo tiempo, Mozilla Firefox intentó implementar soporte para la cuarta edición de la especificación, y el primer navegador en el que apareció un soporte incompleto para la especificación 3.1 fue Internet Explorer 8 [140] .
Los errores cometidos por los desarrolladores de navegadores populares en la implementación de la especificación suelen ser menores [141] . A partir de noviembre de 2009, el modelo de objeto de documento tiene un soporte más limitado [142] .
Según el creador del lenguaje, el soporte de Microsoft en Internet Explorer de uno de los motores JavaScript rápidos que existen y se usa en otros navegadores puede dar lugar a la aparición de aplicaciones que funcionan con gráficos tridimensionales , juegos 3D escritos en JavaScript, la uso de JavaScript en tareas que anteriormente utilizaban la tecnología Adobe Flash [143] .
La prueba de regresión del cumplimiento del navegador con la tercera edición de la especificación ECMA-262 se puede realizar [144] [145] utilizando la herramienta desarrollada por Google para probar el cumplimiento de la especificación ECMAScript Sputnik , que incluye más de cinco mil pruebas cases [146] y recibió su nombre del equipo ruso de Google [146] , así como del shell sputniktests-webrunner [147] escrito por Yuri Zaitsev o del servicio de Google [148] . Los casos de prueba incluidos en Sputnik se están actualizando en relación con el lanzamiento de la quinta edición de la especificación ECMA-262, reflejando cambios en comparación con su edición anterior [149] .
ECMAScript 5 Conformance Suite [150] es un conjunto de pruebas publicado por Microsoft bajo la licencia BSD [151] para verificar que una implementación del lenguaje ECMAScript se ajusta a la especificación de su quinta edición. Al 12 de marzo de 2010, había 1236 casos de prueba en el paquete, tenía la versión 0.2 alfa y el número de descargas en tres meses fue de 178 [152] .
El conjunto de pruebas de JavaScript [153] [154] de Mozilla está disponible para probar la corrección de las implementaciones de JavaScript .
JavaScript permite a los autores potenciales de código malicioso ejecutarlo en cualquier computadora de la red simplemente abriendo una página web en él. Esto se traduce en dos limitaciones fundamentales:
Además, los proveedores de navegadores están introduciendo restricciones adicionales en respuesta a los abusos que se producen. Así apareció, en particular, la prohibición de abrir una ventana cuyo tamaño de un lado sea inferior a cien píxeles [155] .
Vulnerabilidades entre sitiosUn problema común relacionado con JavaScript es el cross-site scripting o XSS, una violación de la regla de restricción de dominio. Las vulnerabilidades XSS ocurren en situaciones en las que un atacante tiene la capacidad de colocar un script en una página que se muestra al usuario. En este caso, el script obtiene acceso al sitio con los derechos de este usuario, lo que en algunos casos abre la posibilidad de enviar información confidencial, realizando transacciones no deseadas .
Las vulnerabilidades XSS también ocurren debido a errores cometidos por los desarrolladores de navegadores [157] .
Otro tipo de vulnerabilidad entre sitios es la falsificación de solicitudes entre sitios o CSRF. Se basa en la capacidad del sitio del atacante para obligar al navegador del usuario a realizar una acción no deseada en el sitio de destino (por ejemplo, una transferencia bancaria de dinero). Esto es posible si el sitio de destino solo se basa en cookies HTTP o solicitudes de autorización. En este caso, las solicitudes iniciadas por el código del sitio del atacante se ejecutan de la misma manera que las solicitudes del usuario si está autorizado en el sitio de destino. Uno de los medios de protección contra CSRF es realizar la autenticación en cualquier solicitud que tenga consecuencias irreversibles. Analizar el referente HTTP también puede ayudar .
Confianza del lado del cliente fuera de lugarLos desarrolladores de aplicaciones cliente, ya sea que utilicen JavaScript o no, deben ser conscientes de que este último puede estar bajo el control de los atacantes. Por lo tanto, se puede omitir cualquier verificación del lado del cliente, JavaScript puede estar ejecutándose o no. El código ofuscado puede someterse a ingeniería inversa ; los datos del formulario se pueden enviar al servidor sin la validación de JavaScript ; los scripts se pueden deshabilitar parcialmente, por lo que, por ejemplo, no se puede implementar una protección confiable contra el almacenamiento de imágenes usando JavaScript [158] ; es extremadamente imprudente incrustar la contraseña en JavaScript que se ejecuta en el cliente, donde un atacante puede encontrarla.
Errores en el navegador, complementos y extensionesJavaScript proporciona una interfaz para una amplia gama de capacidades del navegador, algunas de las cuales pueden contener errores como desbordamientos de búfer . Esto le permite escribir scripts que hacen que se ejecute código arbitrario en el sistema del usuario.
Se han encontrado errores similares en navegadores de uso común, incluidos Mozilla Firefox [159] , Internet Explorer [160] , Safari [161] . Al identificar errores potencialmente peligrosos en el navegador y tener información sobre exploits implementados , el fabricante y los expertos en seguridad recomiendan deshabilitar JavaScript antes del lanzamiento del parche [162] [163] .
Complementos como reproductores , Macromedia Flash y una serie de componentes ActiveX disponibles de forma predeterminada en Internet Explorer también pueden contener errores explotados con JavaScript, como ha sucedido antes [164] [165] .
Las extensiones de Mozilla Firefox no están aisladas unas de otras: una extensión puede corregir a otra, que puede ser aprovechada por atacantes. En SecurityByte & Owasp AppSec Asia 2009 , Roberto Suggi Liverani y Nick Freeman demostraron tres vulnerabilidades en extensiones populares de Firefox, descargadas más de 30 millones de veces desde el sitio [166] .
Errores de implementación de SandboxLos navegadores pueden ejecutar JavaScript fuera de la zona de pruebas con los privilegios necesarios para crear y eliminar archivos, por ejemplo. Sin embargo, tales privilegios no deben otorgarse al código de la web.
Los privilegios inadecuados para JavaScript desde la web han sido la causa de las vulnerabilidades tanto en Internet Explorer [167] como en Mozilla Firefox [168] .
Microsoft Windows permite que los archivos JavaScript se ejecuten como programas normales sin estar en un espacio aislado. Esto permite crear troyanos [169] .
JavaScript | |
---|---|
Ideas | |
compiladores | |
Motores | |
Bibliotecas y marcos | |
Editores | |
Instrumentos |
|
Tecnologías relacionadas | |
Gente | |
Categoría |
ECMAScript | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Dialectos | |||||||||||||
Motores ( comparación ) |
| ||||||||||||
Marcos , bibliotecas |
| ||||||||||||
Gente | |||||||||||||
Otro |
|
Lenguajes de programación | |
---|---|
|
Web y sitios web | |
---|---|
globalmente | |
En la zona | |
Tipos de sitios y servicios |
|
Creación y mantenimiento | |
Tipos de diseños, páginas, sitios. | |
Técnico | |
Marketing | |
sociedad y Cultura |