JavaScript ( JS ) [ a ] es un lenguaje de programación y una tecnología central de la Web , junto con HTML y CSS . Creado por Brendan Eich en 1995, [ 6 ] es mantenido por el comité técnico TC39 de Ecma International , [ 10 ] con API web relacionadas mantenidas por W3C y WHATWG . [ 11 ] A partir de 2025, JavaScript es el lenguaje de programación más utilizado en GitHub . [ b ] [ 12 ] , sin embargo, TypeScript , que es una versión de JavaScript que es estricta con los tipos y es de tipado estático, superó a JavaScript en Github en agosto de 2025. [ 13 ]
Los navegadores web tienen un motor JavaScript dedicado que ejecuta el código del cliente . Estos motores también se utilizan en algunos servidores y en diversas aplicaciones . El sistema de ejecución más popular para uso fuera del navegador es Node.js. [ 14 ]
JavaScript es un lenguaje de alto nivel , a menudo compilado justo a tiempo, que cumple con el estándar ECMAScript . [ 15 ] Posee tipado dinámico , orientación a objetos basada en prototipos y funciones de primera clase . Es multiparadigma , ya que admite estilos de programación orientados a eventos , funcionales e imperativos . Cuenta con interfaces de programación de aplicaciones (API) para trabajar con texto, fechas, expresiones regulares , estructuras de datos estándar y el Modelo de Objetos del Documento (DOM).
El estándar ECMAScript no incluye ninguna función de entrada/salida (E/S), como redes , almacenamiento o gráficos . En la práctica, el navegador web u otro sistema de ejecución proporciona API de JavaScript para la E/S.
Aunque Java y JavaScript son similares en nombre y sintaxis , ambos lenguajes son distintos y difieren enormemente en su diseño.
Historia
Creación en Netscape
El primer navegador web popular con interfaz gráfica de usuario , Mosaic , se lanzó en 1993. Los desarrolladores principales de Mosaic fundaron la corporación Netscape , que lanzó un navegador más pulido, Netscape Navigator , en 1994. Este se convirtió rápidamente en el más utilizado. [ 16 ]
Durante los primeros años de la Web, las páginas web solo podían ser estáticas, sin capacidad para un comportamiento dinámico una vez cargadas en el navegador. En el floreciente sector del desarrollo web existía el deseo de eliminar esta limitación, por lo que en 1995, Netscape decidió añadir un lenguaje de programación a Navigator. Para lograrlo, siguieron dos caminos: colaborar con Sun Microsystems para integrar el lenguaje Java y contratar a Brendan Eich para integrar el lenguaje Scheme . [ 6 ]
El objetivo era un "lenguaje para las masas" [ 17 ] "para ayudar a personas sin conocimientos de programación a crear sitios web dinámicos e interactivos ". [ 18 ] La dirección de Netscape pronto decidió que la mejor opción era que Eich diseñara un nuevo lenguaje, con una sintaxis similar a Java y menos parecida a Scheme u otros lenguajes de scripting existentes . [ 5 ] [ 6 ] Aunque el nuevo lenguaje y su implementación de intérprete se llamaron LiveScript cuando se lanzaron por primera vez como parte de una versión beta de Navigator en septiembre de 1995, el nombre se cambió a JavaScript para el lanzamiento oficial en diciembre. [ 1 ] [ 6 ] [ 19 ] [ 20 ]
La elección del nombre JavaScript causó confusión, dando a entender que estaba directamente relacionado con Java. En aquel entonces, el auge de las puntocom había comenzado y Java era un nuevo lenguaje popular, por lo que Eich consideró que el nombre JavaScript era una estrategia de marketing de Netscape. [ 17 ]
Adopción por parte de Microsoft
Microsoft lanzó Internet Explorer en 1995, lo que dio lugar a una guerra de navegadores con Netscape. En el ámbito de JavaScript, Microsoft creó su propio intérprete llamado JScript . [ 21 ]
Microsoft lanzó JScript por primera vez en 1996, junto con el soporte inicial para CSS y extensiones para HTML . Cada una de estas implementaciones era notablemente diferente de sus contrapartes en Netscape Navigator . [ 22 ] [ 23 ] Estas diferencias dificultaron que los desarrolladores lograran que sus sitios web funcionaran correctamente en ambos navegadores, lo que llevó al uso generalizado de los logotipos "mejor visualizado en Netscape" y "mejor visualizado en Internet Explorer" durante varios años. [ 22 ] [ 24 ]
El auge de JScript
Más tarde, Brendan Eich dijo sobre este período: "Sigue siendo una especie de lenguaje secundario . Se considera lento o molesto. La gente usa ventanas emergentes o esos mensajes desplazables en la antigua barra de estado en la parte inferior del navegador antiguo ". [ 17 ]
En noviembre de 1996, Netscape presentó JavaScript a Ecma International como punto de partida para una especificación estándar a la que pudieran ajustarse todos los proveedores de navegadores. Esto dio lugar al lanzamiento oficial de la primera especificación del lenguaje ECMAScript en junio de 1997.
El proceso de estandarización continuó durante algunos años, con el lanzamiento de ECMAScript 2 en junio de 1998 y ECMAScript 3 en diciembre de 1999. El trabajo en ECMAScript 4 comenzó en 2000. [ 21 ]
Sin embargo, el esfuerzo por estandarizar completamente el lenguaje se vio socavado por la creciente posición dominante de Microsoft en el mercado de navegadores. A principios de la década de 2000, la cuota de mercado de Internet Explorer alcanzó el 95 %. [ 25 ] Esto significó que JScript se convirtiera en el estándar de facto para la programación del lado del cliente en la web.
Microsoft participó inicialmente en el proceso de estandarización e implementó algunas propuestas en su lenguaje JScript, pero finalmente dejó de colaborar en el trabajo de ECMA. Por lo tanto, ECMAScript 4 quedó archivado.
Crecimiento y estandarización
Durante el período de dominio de Internet Explorer a principios de la década de 2000, la programación del lado del cliente se estancó. Esto comenzó a cambiar en 2004, cuando el sucesor de Netscape, Mozilla , lanzó el navegador Firefox . Firefox fue bien recibido por muchos, arrebatando una importante cuota de mercado a Internet Explorer. [ 26 ]
En 2005, Mozilla se unió a ECMA International y comenzó a trabajar en el estándar ECMAScript para XML (E4X). Esto llevó a que Mozilla colaborara con Macromedia (posteriormente adquirida por Adobe Systems ), que estaba implementando E4X en su lenguaje ActionScript 3, basado en un borrador de ECMAScript 4. El objetivo era estandarizar ActionScript 3 como el nuevo ECMAScript 4. Para ello, Adobe Systems lanzó la implementación Tamarin como un proyecto de código abierto . Sin embargo, Tamarin y ActionScript 3 eran demasiado diferentes de los lenguajes de scripting del lado del cliente ya establecidos, y sin la cooperación de Microsoft, ECMAScript 4 nunca llegó a materializarse.
Mientras tanto, se estaban produciendo avances muy importantes en comunidades de código abierto no afiliadas al trabajo de ECMA. En 2005, Jesse James Garrett publicó un documento técnico en el que acuñó el término Ajax y describió un conjunto de tecnologías, de las cuales JavaScript era la base, para crear aplicaciones web donde los datos se pueden cargar en segundo plano, evitando la necesidad de recargar la página completa. Esto dio lugar a un renacimiento de JavaScript, impulsado por las bibliotecas de código abierto y las comunidades que se formaron a su alrededor. Se crearon muchas bibliotecas nuevas, incluidas jQuery , Prototype , Dojo Toolkit y MooTools .
Google lanzó su navegador Chrome en 2008, con el motor JavaScript V8 que era más rápido que su competencia. [ 27 ] [ 28 ] La innovación clave fue la compilación justo a tiempo (JIT), [ 29 ] por lo que otros proveedores de navegadores tuvieron que renovar sus motores para JIT. [ 30 ]
En julio de 2008, estas distintas partes se reunieron en una conferencia en Oslo . Esto condujo al acuerdo final, a principios de 2009, para aunar todos los trabajos relevantes e impulsar el desarrollo del lenguaje. El resultado fue el estándar ECMAScript 5, publicado en diciembre de 2009.
Alcanzando la madurez
El ambicioso trabajo en el lenguaje continuó durante varios años, culminando en una extensa colección de adiciones y refinamientos que se formalizaron con la publicación de ECMAScript 6 en 2015. [ 31 ]
La creación de Node.js en 2009 por Ryan Dahl provocó un aumento significativo en el uso de JavaScript fuera de los navegadores web. Node combina el motor V8 , un bucle de eventos y API de E/S , proporcionando así un sistema de ejecución de JavaScript independiente. [ 32 ] [ 33 ] En 2018, Node había sido utilizado por millones de desarrolladores, [ 34 ] y npm tenía la mayor cantidad de módulos de cualquier gestor de paquetes en el mundo. [ 35 ]
La especificación preliminar de ECMAScript se mantiene actualmente de forma abierta en GitHub , [ 36 ] y las ediciones se producen mediante instantáneas anuales regulares. [ 36 ] Las posibles revisiones del lenguaje se evalúan mediante un proceso de propuesta exhaustivo. [ 37 ] [ 38 ] Ahora, en lugar de números de edición, los desarrolladores comprueban el estado de las próximas características individualmente. [ 36 ]
El ecosistema actual de JavaScript cuenta con numerosas bibliotecas y marcos de trabajo , prácticas de programación establecidas y un uso sustancial de JavaScript fuera de los navegadores web. [ 20 ] Además, con el auge de las aplicaciones de una sola página y otros sitios web con un uso intensivo de JavaScript, se han creado varios transpiladores para facilitar el proceso de desarrollo. [ 39 ]
A partir de 2025, la inmensa mayoría de los sitios web (98,9%) utilizan JavaScript para el comportamiento de las páginas web del lado del cliente . [ 40 ]
Marca
«JavaScript» es una marca registrada de Oracle Corporation en los Estados Unidos. [ 41 ] [ 42 ] La marca registrada fue emitida originalmente a Sun Microsystems el 6 de mayo de 1997 y fue transferida a Oracle cuando esta adquirió Sun en 2009. [ 43 ] [ 44 ]
En septiembre de 2024, Ryan Dahl encabezó una carta en la que se pedía a Oracle que liberara la marca registrada JavaScript. [ 45 ] Brendan Eich , el creador original de JavaScript, fue uno de los más de 14.000 firmantes que apoyaron la iniciativa.
Uso del sitio web por parte del cliente
JavaScript es el lenguaje de scripting dominante del lado del cliente en la Web, y el 99% de todos los sitios web lo utilizan para este propósito. [ 40 ] Los scripts se incrustan o se incluyen desde documentos HTML e interactúan con el DOM .
Todos los navegadores web principales tienen un motor JavaScript integrado que ejecuta el código en el dispositivo del usuario.
Ejemplos de comportamiento guionizado
- Carga de contenido nuevo en una página web sin recargar la página, mediante Ajax o WebSocket . Por ejemplo, los usuarios de redes sociales pueden enviar y recibir mensajes sin abandonar la página actual.
- Animaciones de páginas web, como la aparición y desaparición gradual de objetos, el cambio de tamaño y el movimiento de los mismos.
- Jugar a juegos de navegador .
- Controlar la reproducción de contenido multimedia en streaming .
- Generación de anuncios emergentes o cuadros de alerta.
- Validar los valores de entrada de un formulario web antes de que los datos se envíen a un servidor web .
- Registrar datos sobre el comportamiento del usuario y enviarlos a un servidor. El propietario del sitio web puede utilizar estos datos para análisis , seguimiento de anuncios y personalización .
- Redirigir a un usuario a otra página.
- Almacenar y recuperar datos en el dispositivo del usuario, mediante los estándares de almacenamiento o IndexedDB .
Bibliotecas y marcos de trabajo
Más del 80% de los sitios web utilizan una biblioteca JavaScript de terceros o un marco web como parte de su scripting del lado del cliente. [ 46 ]
jQuery es, con diferencia, el más utilizado. [ 46 ] Otros notables incluyen Angular , Bootstrap , Lodash , Modernizr , React , Underscore y Vue . [ 46 ] Se pueden usar varias opciones en conjunto, como jQuery y Bootstrap. [ 47 ]
Sin embargo, el término "Vanilla JS" se acuñó para referirse a sitios web que no utilizan ninguna biblioteca ni framework, sino que se basan completamente en la funcionalidad estándar de JavaScript. [ 48 ]
Otros usos
El uso de JavaScript se ha extendido más allá de sus orígenes en los navegadores web . Los motores de JavaScript ahora están integrados en una variedad de otros sistemas de software, tanto para implementaciones de sitios web del lado del servidor como para aplicaciones que no son de navegador .
Los primeros intentos de promover el uso de JavaScript del lado del servidor fueron Netscape Enterprise Server y los Servicios de información de Internet de Microsoft , [ 49 ] [ 50 ] pero fueron nichos pequeños. [ 51 ] El uso del lado del servidor finalmente comenzó a crecer a finales de la década de 2000, con la creación de Node.js y otros enfoques . [ 51 ]
Electron , Cordova , React Native y otros frameworks de aplicaciones se han utilizado para crear muchas aplicaciones con comportamiento implementado en JavaScript. Otras aplicaciones que no se basan en navegadores incluyen la compatibilidad de Adobe Acrobat con la creación de scripts para documentos PDF [ 52 ] y extensiones de GNOME Shell escritas en JavaScript. [ 53 ]
Oracle solía proporcionar Nashorn , un intérprete de JavaScript, como parte de su biblioteca API del Kit de Desarrollo de Java (JDK), junto con jjs, un intérprete de línea de comandos, a partir de la versión 8 del JDK. Se eliminó en la versión 15 del JDK. Como reemplazo, Oracle ofreció GraalJS, que también se puede usar con OpenJDK , lo que permite crear y referenciar objetos Java en código JavaScript y agregar scripts en tiempo de ejecución en JavaScript a aplicaciones escritas en Java. [ 54 ] [ 55 ] [ 56 ] [ 57 ]
JavaScript se ha utilizado en algunos sistemas embebidos , generalmente aprovechando Node.js. [ 58 ] [ 59 ] [ 60 ]
Ejecución
Motor JavaScript
Los primeros motores de JavaScript eran intérpretes del código fuente , pero los motores modernos utilizan la compilación justo a tiempo para mejorar el rendimiento. [ 61 ] Los motores de JavaScript suelen ser desarrollados por los proveedores de navegadores web , y todos los navegadores principales incluyen uno. En un navegador, el motor de JavaScript se ejecuta en conjunto con el motor de renderizado a través del Modelo de Objetos del Documento y los enlaces Web IDL . [ 62 ] Sin embargo, el uso de motores de JavaScript no se limita a los navegadores; por ejemplo, el motor V8 es un componente central del sistema de tiempo de ejecución de Node.js. [ 63 ] También se les llama motores ECMAScript , por el nombre oficial de la especificación. Con la llegada de WebAssembly , algunos motores también pueden ejecutar este código en el mismo entorno aislado que el código JavaScript normal. [ 64 ] [ 63 ]
Sistema de tiempo de ejecución
Un motor JavaScript debe estar integrado en un sistema de ejecución (como un navegador web o un sistema independiente) para que los scripts puedan interactuar con el entorno. El sistema de ejecución incluye las API necesarias para las operaciones de entrada/salida , como redes , almacenamiento y gráficos , y permite importar scripts.
JavaScript es un lenguaje de un solo hilo . El entorno de ejecución procesa los mensajes de una cola uno a uno y llama a una función asociada a cada nuevo mensaje, creando un marco de pila de llamadas con los argumentos y las variables locales de la función . La pila de llamadas se reduce y se expande según las necesidades de la función. Cuando la pila de llamadas está vacía al finalizar la función, JavaScript pasa al siguiente mensaje de la cola. Esto se denomina bucle de eventos , descrito como "ejecución completa" porque cada mensaje se procesa por completo antes de considerar el siguiente. Sin embargo, el modelo de concurrencia del lenguaje describe el bucle de eventos como no bloqueante : la E/S del programa se realiza mediante eventos y funciones de devolución de llamada . Esto significa, por ejemplo, que JavaScript puede procesar un clic del ratón mientras espera que una consulta a la base de datos devuelva información. [ 65 ]
Los entornos de ejecución independientes más destacados son Node.js , Deno y Bun .
Características
Las siguientes características son comunes a todas las implementaciones de ECMAScript que cumplen con el estándar, a menos que se especifique explícitamente lo contrario. El número de palabras reservadas citadas, incluidas las palabras clave, es de 50 a 60 y varía según la implementación.
Imperativo y estructurado
JavaScript admite gran parte de la sintaxis de programación estructurada de C (por ejemplo, ifsentencias, whilebucles, switchsentencias, do whilebucles, etc.). Una excepción parcial es el ámbito : originalmente JavaScript solo tenía ámbito de función con var; el ámbito de bloque se añadió en ECMAScript 2015 con las palabras clave lety const. Al igual que C, JavaScript distingue entre expresiones y sentencias . Una diferencia sintáctica con respecto a C es la inserción automática de punto y coma , que permite omitir los puntos y coma (que finalizan las sentencias). [ 66 ]
De tipificación débil
JavaScript es débilmente tipado , lo que significa que ciertos tipos se convierten implícitamente dependiendo de la operación utilizada. [ 67 ]
- El operador binario
+convierte ambos operandos a una cadena a menos que ambos operandos sean números. Esto se debe a que el operador de suma también funciona como operador de concatenación. - El
-operador binario siempre convierte ambos operandos a un número. - Ambos operadores unarios (
+,-) siempre convierten el operando a un número. Sin embargo,+siempre convierte aNumber( binary64 ) mientras que-conservaBigInt( integer ) [ 68 ]
Los valores se convierten a cadenas de la siguiente manera: [ 67 ]
- Las cadenas se dejan tal cual.
- Los números se convierten a su representación en cadena de caracteres.
- Los elementos de los arrays se convierten a cadenas y luego se unen mediante comas (
,). - Otros objetos se convierten a la cadena
[object Object]dondeObjectes el nombre del constructor del objeto.
Los valores se convierten a números mediante una conversión a cadenas y, posteriormente, una conversión de cadenas a números. Estos procesos pueden modificarse definiendo toStringfunciones valueOfen el prototipo para la conversión a cadenas y a números, respectivamente.
JavaScript ha recibido críticas por la forma en que implementa estas conversiones, ya que la complejidad de las reglas puede confundirse con inconsistencia. [ 69 ] [ 67 ] Por ejemplo, al sumar un número a una cadena, el número se convertirá a cadena antes de realizar la concatenación, pero al restar un número de una cadena, la cadena se convertirá a número antes de realizar la resta.
También se suele mencionar que {} + []resulta en 0(número). Esto es engañoso: {}se interpreta como un bloque de código vacío en lugar de un objeto vacío, y el array vacío se convierte a número mediante el +operador unario restante. Si la expresión está entre paréntesis (-- ({} + [])), las llaves se interpretan como un objeto vacío y el resultado de la expresión es "[object Object]"el esperado. [ 67 ]
Dinámica
Mecanografía
JavaScript es de tipado dinámico, como la mayoría de los demás lenguajes de scripting . Un tipo se asocia a un valor en lugar de a una expresión. Por ejemplo, una variable inicialmente vinculada a un número puede reasignarse a una cadena . [ 70 ] JavaScript admite varias formas de probar el tipo de los objetos, incluido el tipado dinámico (duck typing) . [ 71 ]
Evaluación en tiempo de ejecución
JavaScript incluye una evalfunción que puede ejecutar instrucciones proporcionadas como cadenas de texto en tiempo de ejecución.
Orientación a objetos (basada en prototipos)
Douglas Crockford describe la herencia prototípica en JavaScript de la siguiente manera:
Se crean objetos prototipo y luego... se crean nuevas instancias. Los objetos son mutables en JavaScript, por lo que podemos ampliar las nuevas instancias, añadiéndoles nuevos campos y métodos. Estos pueden actuar como prototipos para objetos aún más nuevos. No necesitamos clases para crear muchos objetos similares... Los objetos heredan de otros objetos. ¿Qué podría ser más orientado a objetos que eso? [ 72 ]
En JavaScript, un objeto es un array asociativo , aumentado con un prototipo (ver más abajo); cada clave proporciona el nombre de una propiedad del objeto , y hay dos formas sintácticas de especificar dicho nombre: notación de punto ( obj.x = 10) y notación de corchetes ( obj["x"] = 10). Una propiedad puede agregarse, reasignarse o eliminarse en tiempo de ejecución. La mayoría de las propiedades de un objeto (y cualquier propiedad que pertenezca a la cadena de herencia de prototipos de un objeto) pueden enumerarse usando un for...inbucle.
Prototipos
JavaScript utiliza prototipos donde muchos otros lenguajes orientados a objetos utilizan clases para la herencia , [ 73 ] pero aún es posible simular la mayoría de las características basadas en clases con el sistema de prototipos. [ 74 ] Además, ECMAScript versión 6 (lanzada en junio de 2015) introdujo las palabras clave class , extends y super , que sirven como azúcar sintáctico para abstraer el sistema de herencia prototípica subyacente con una interfaz más convencional. Los constructores se declaran especificando un método llamado constructor , y todas las clases son automáticamente subclases de la clase base Object, de manera similar a Java.
clase Persona { constructor ( nombre ) { this . nombre = nombre ; } }clase Estudiante extiende Persona { constructor ( nombre , id ) { super ( nombre ); this . id = id ; } }const bob = new Student ( "Robert " , 12345 ) ; console.log ( bob.name ) ; // RobertAunque el mecanismo subyacente de objetos todavía se basa en prototipos, la sintaxis más reciente es similar a la de otros lenguajes orientados a objetos. Las variables privadas se declaran anteponiendo el signo de número (#) al nombre del campo, y el polimorfismo no se admite directamente, aunque se puede emular llamando manualmente a diferentes funciones según el número y el tipo de argumentos proporcionados. [ 75 ]
Funciona como constructor de objetos
Las funciones también actúan como constructores de objetos, además de su función típica. Anteponer ` new` a una llamada a una función creará una instancia de un prototipo, heredando propiedades y métodos del constructor (incluidas las propiedades del Objectprototipo). [ 76 ] ECMAScript 5 ofrece el Object.createmétodo, que permite la creación explícita de una instancia sin heredar automáticamente del Objectprototipo (los entornos más antiguos pueden asignar el prototipo a null). [ 77 ] La propiedad del constructor prototypedetermina el objeto utilizado para el prototipo interno del nuevo objeto. Se pueden agregar nuevos métodos modificando el prototipo de la función utilizada como constructor.
// Este código es completamente equivalente al fragmento anterior function Person ( name ) { this . name = name ; }función Estudiante ( nombre , id ) { Persona . llamar ( esto , nombre ); esto . id = id ; }var bob = new Student ( " Robert" , 12345 ) ; console.log ( bob.name ) ; // RobertLas clases integradas de JavaScript, como Arrayy Object, también tienen prototipos que se pueden modificar. Sin embargo, generalmente se considera una mala práctica modificar los objetos integrados , porque el código de terceros puede usar o heredar métodos y propiedades de estos objetos, y puede que no espere que se modifique el prototipo. [ 78 ]
Funciona como métodos
A diferencia de muchos lenguajes orientados a objetos, en JavaScript no existe distinción entre la definición de una función y la de un método . 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 `this` local de la función se vincula a ese objeto durante esa invocación.
Funcional
Las funciones de JavaScript son de primera clase ; una función se considera un objeto. [ 79 ] Como tal, una función puede tener propiedades y métodos, como .call()y .bind(). [ 80 ]
Cierre léxico
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 anidada forma un cierre léxico : el ámbito léxico de la función externa (incluyendo cualquier constante, variable local o valor de argumento) pasa a formar parte del estado interno de cada objeto de función interna, incluso después de que la ejecución de la función externa haya concluido. [ 81 ]
Función anónima
JavaScript también admite funciones anónimas .
Delegativo
JavaScript admite delegación implícita y explícita .
Funciones como roles (rasgos y mixins)
JavaScript admite de forma nativa varias implementaciones basadas en funciones de patrones de Role [ 82 ] como Traits [ 83 ] [ 84 ] y Mixins . [ 85 ] Dicha función define un comportamiento adicional mediante al menos un método vinculado a la thispalabra clave dentro de su functioncuerpo. Un Role debe entonces delegarse explícitamente a través de callo applya objetos que necesitan presentar un comportamiento adicional que no se comparte a través de la cadena de prototipos.
Composición y herencia de objetos
Si bien la delegación explícita basada en funciones abarca la composición en JavaScript, la delegación implícita se produce cada vez que se recorre la cadena de prototipos para, por ejemplo, encontrar un método que podría estar relacionado con un objeto, pero que no le pertenece directamente. Una vez encontrado el método, se llama dentro del contexto de dicho objeto. Por lo tanto, la herencia en JavaScript está cubierta por un automatismo de delegación vinculado a la propiedad de prototipo de las funciones constructoras.
Misceláneas
Numeración basada en cero
JavaScript es un lenguaje de índice cero .
Funciones variádicas
Se puede pasar un número indefinido de parámetros a una función. La función puede acceder a ellos mediante parámetros formalesarguments y también a través del objeto local . También se pueden crear funciones variádicas utilizando este bindmétodo.
Literales de array y objeto
Al igual que en muchos lenguajes de scripting, los arrays y los objetos ( arrays asociativos en otros lenguajes) se pueden crear con una sintaxis abreviada y concisa. De hecho, estos literales constituyen la base del formato de datos JSON .
expresiones regulares
JavaScript admite expresiones regulares para búsquedas y manipulación de texto. [ 76 ] : 139
Promesas
El objeto Promise integrado proporciona funcionalidades para gestionar promesas y asociar manejadores con el resultado final de una acción asíncrona. JavaScript ofrece métodos combinadores que permiten a los desarrolladores combinar varias promesas de JavaScript y realizar operaciones según diferentes escenarios. Los métodos introducidos son: Promise.race, Promise.all, Promise.allSettled y Promise.any.
Async/await
Async/await permite estructurar una función asíncrona y no bloqueante de forma similar a una función síncrona convencional. El código asíncrono y no bloqueante se puede escribir, con una sobrecarga mínima, con una estructura similar a la del código síncrono y bloqueante tradicional.
Extensiones específicas del proveedor
Históricamente, algunos motores de JavaScript admitían estas características no estándar:
- Comprensión de matrices y expresiones generadoras (como en Python)
- expresiones de función concisas (
function(args) expr; esta sintaxis experimental precedió a las funciones flecha) - ECMAScript para XML (E4X), una extensión que agrega soporte nativo para XML a ECMAScript (no compatible con Firefox desde la versión 21 [ 86 ] ).
Sintaxis
Las variables en JavaScript se pueden definir usando las palabras clave var, [ 87 ] let[ 88 ] o const[ 89 ] . Las variables definidas sin palabras clave se definirán en el ámbito global.
Las funciones flecha se introdujeron por primera vez en la 6.ª edición de ECMAScript 2015. Simplifican la sintaxis para escribir funciones en JavaScript. Las funciones flecha son anónimas , por lo que se necesita una variable para referenciarlas y poder invocarlas después de su creación, a menos que estén entre paréntesis y se ejecuten inmediatamente.
Aquí tienes un ejemplo de sintaxis de JavaScript.
// Declara una variable con ámbito de función llamada `x` y le asigna implícitamente el // valor especial `undefined`. Las variables sin valor se establecen automáticamente // a `undefined`. // Generalmente se considera que `var` es una mala práctica y se suelen preferir `let` y `const`. var x ;// Las variables se pueden establecer manualmente en `undefined` de la siguiente manera: let x2 = undefined ;// Declara una variable con ámbito de bloque llamada `y` y la establece implícitamente en // `undefined`. La palabra clave `let` se introdujo en ECMAScript 2015. let y ;// Declara una variable de ámbito de bloque, no reasignable, llamada `z`, y la establece en // una cadena literal. La palabra clave `const` también se introdujo en ECMAScript 2015, // y debe asignarse explícitamente.// La palabra clave `const` significa constante, por lo tanto, la variable no se puede reasignar // ya que el valor es `constante`. const z = "¡este valor no se puede reasignar!" ;// Declara una variable de ámbito global y le asigna el valor 3. Esto generalmente se considera // una mala práctica y no funcionará si el modo estricto está activado. t = 3 ;// Declara una variable llamada `myNumber` y le asigna un literal numérico (el valor // `2`). let myNumber = 2 ;// Reasigna `myNumber`, estableciéndolo a una cadena literal (el valor `"foo"`). // JavaScript es un lenguaje de tipado dinámico, por lo que esto es válido. myNumber = "foo" ;Observe los comentarios en los ejemplos anteriores, todos los cuales fueron precedidos por dos barras inclinadas .
Puedes encontrar más ejemplos en la página de Wikibooks sobre ejemplos de sintaxis de JavaScript .
Seguridad
JavaScript y el DOM ofrecen la posibilidad de que autores maliciosos distribuyan scripts para ejecutarse en un ordenador cliente a través de la web. Los desarrolladores de navegadores minimizan este riesgo mediante dos restricciones. En primer lugar, los scripts se ejecutan en un entorno aislado (sandbox) donde solo pueden realizar acciones relacionadas con la web, no tareas de programación de propósito general como la creación de archivos. En segundo lugar, los scripts están sujetos a la política del mismo origen : los scripts de un sitio web no tienen acceso a información como nombres de usuario, contraseñas o cookies enviadas a otro sitio. La mayoría de las vulnerabilidades de seguridad relacionadas con JavaScript son fallos de la política del mismo origen o del entorno aislado.
Existen subconjuntos de JavaScript general —ADsafe, Secure ECMAScript (SES)— que proporcionan mayores niveles de seguridad, especialmente en código creado por terceros (como anuncios). [ 90 ] [ 91 ] Closure Toolkit es otro proyecto para la incrustación segura y el aislamiento de JavaScript y HTML de terceros. [ 92 ]
La Política de Seguridad de Contenido es el principal método previsto para garantizar que solo se ejecute código de confianza en una página web.
Secuencias de comandos entre sitios
Un problema de seguridad común relacionado con JavaScript es el cross-site scripting (XSS), una violación de la política del mismo origen . Las vulnerabilidades XSS ocurren cuando un atacante puede lograr que un sitio web objetivo, como un sitio web de banca en línea, incluya un script malicioso en la página web que se muestra a la víctima. En este ejemplo, el script puede acceder a la aplicación bancaria con los privilegios de la víctima, lo que podría revelar información confidencial o transferir dinero sin su autorización. Una solución importante para las vulnerabilidades XSS es la sanitización de HTML .
Algunos navegadores incluyen protección parcial contra ataques XSS reflejados , en los que el atacante proporciona una URL con código malicioso. Sin embargo, incluso los usuarios de estos navegadores son vulnerables a otros ataques XSS, como aquellos en los que el código malicioso se almacena en una base de datos. Solo un diseño correcto de las aplicaciones web en el servidor puede prevenir completamente los ataques XSS.
Las vulnerabilidades XSS también pueden ocurrir debido a errores de implementación por parte de los autores de navegadores. [ 93 ]
Falsificación de solicitudes entre sitios
Otra vulnerabilidad entre sitios es la falsificación de solicitudes entre sitios (CSRF). En CSRF, el código del sitio del atacante engaña al navegador de la víctima para que realice acciones no deseadas en el sitio de destino (como transferir dinero en un banco). Cuando los sitios de destino dependen exclusivamente de las cookies para la autenticación de solicitudes, las solicitudes originadas por el código del sitio del atacante pueden contener las mismas credenciales de inicio de sesión válidas del usuario que las inició. En general, la solución a CSRF consiste en requerir un valor de autenticación en un campo de formulario oculto, y no solo en las cookies, para autenticar cualquier solicitud que pueda tener efectos duraderos. Verificar el encabezado HTTP Referrer también puede ser útil.
El "secuestro de JavaScript" es un tipo de ataque CSRF en el que una <script>etiqueta en el sitio del atacante explota una página en el sitio de la víctima que devuelve información privada como JSON o JavaScript. Las posibles soluciones incluyen:
Confianza mal depositada en el cliente
Los desarrolladores de aplicaciones cliente-servidor deben reconocer que los clientes no confiables pueden estar bajo el control de atacantes. El autor de una aplicación no debe asumir que su código JavaScript se ejecutará según lo previsto (o que se ejecutará en absoluto), ya que cualquier secreto incrustado en el código podría ser extraído por un adversario decidido. Algunas implicaciones son:
- Los autores de sitios web no pueden ocultar por completo el funcionamiento de su JavaScript, ya que el código fuente sin procesar debe enviarse al cliente. El código puede ofuscarse , pero la ofuscación puede ser objeto de ingeniería inversa.
- La validación de formularios con JavaScript solo ofrece comodidad a los usuarios, no seguridad. Si un sitio web verifica que el usuario haya aceptado sus términos de servicio o filtra los caracteres no válidos de los campos que solo deben contener números, debe hacerlo en el servidor, no solo en el cliente.
- Los scripts se pueden deshabilitar selectivamente, por lo que no se puede confiar en JavaScript para evitar operaciones como hacer clic con el botón derecho en una imagen para guardarla. [ 94 ]
- Se considera una muy mala práctica incrustar información sensible, como contraseñas, en JavaScript porque un atacante puede extraerla. [ 95 ]
- La contaminación de prototipos es una vulnerabilidad en tiempo de ejecución que permite a los atacantes sobrescribir propiedades arbitrarias en el prototipo de un objeto.
Confianza mal depositada en los desarrolladores
Los sistemas de gestión de paquetes como npm y Bower son populares entre los desarrolladores de JavaScript. Estos sistemas permiten gestionar fácilmente las dependencias de los programas con respecto a las bibliotecas de otros desarrolladores. Los desarrolladores confían en que los responsables del mantenimiento de las bibliotecas las mantendrán seguras y actualizadas, pero no siempre es así. Esta confianza ciega ha generado vulnerabilidades. Las nuevas versiones de las bibliotecas utilizadas pueden provocar la aparición de errores o vulnerabilidades en todos los programas que dependen de ellas. Por otro lado, una biblioteca puede permanecer sin parchear con vulnerabilidades conocidas. En un estudio realizado con una muestra de 133 000 sitios web, los investigadores encontraron que el 37 % de ellos incluía una biblioteca con al menos una vulnerabilidad conocida. [ 96 ] "El retraso medio entre la versión más antigua de la biblioteca utilizada en cada sitio web y la versión más reciente disponible es de 1177 días en ALEXA, y el desarrollo de algunas bibliotecas que aún se utilizan activamente cesó hace años." [ 96 ] Otra posibilidad es que el mantenedor de una biblioteca la elimine por completo. Esto ocurrió en marzo de 2016 cuando Azer Koçulu eliminó su repositorio de npm. Esto provocó que decenas de miles de programas y sitios web que dependían de sus bibliotecas dejaran de funcionar. [ 97 ] [ 98 ]
Errores de codificación del navegador y de los complementos
JavaScript proporciona una interfaz para una amplia gama de funcionalidades del navegador, algunas de las cuales pueden presentar vulnerabilidades como desbordamientos de búfer . Estas vulnerabilidades permiten a los atacantes escribir scripts que ejecutan cualquier código en el sistema del usuario. Este código no se limita a otras aplicaciones JavaScript. Por ejemplo, una vulnerabilidad de desbordamiento de búfer puede permitir a un atacante acceder a la API del sistema operativo con privilegios de superusuario.
Estos fallos han afectado a los principales navegadores, incluidos Firefox, [ 99 ] Internet Explorer, [ 100 ] y Safari. [ 101 ]
Los complementos, como los reproductores de vídeo, Adobe Flash y la amplia gama de controles ActiveX habilitados por defecto en Microsoft Internet Explorer, también pueden tener vulnerabilidades explotables mediante JavaScript (estas vulnerabilidades ya se han explotado en el pasado). [ 102 ] [ 103 ]
En Windows Vista, Microsoft intentó contener los riesgos de errores como los desbordamientos de búfer ejecutando el proceso de Internet Explorer con privilegios limitados. [ 104 ] Google Chrome, de manera similar, confina sus renderizadores de página a su propio " sandbox ".
Errores de implementación de Sandbox
Los navegadores web pueden ejecutar JavaScript fuera del entorno aislado, con los privilegios necesarios para, por ejemplo, crear o eliminar archivos. Dichos privilegios no están destinados a ser otorgados al código de la web.
La concesión incorrecta de privilegios a JavaScript desde la web ha contribuido a las vulnerabilidades tanto en Internet Explorer [ 105 ] como en Firefox. [ 106 ] En Windows XP Service Pack 2, Microsoft redujo los privilegios de JScript en Internet Explorer. [ 107 ]
Microsoft Windows permite que los archivos fuente de JavaScript en el disco duro de una computadora se ejecuten como programas de propósito general, sin aislamiento (véase: Windows Script Host ). Esto convierte a JavaScript (al igual que VBScript ) en un vector teóricamente viable para un caballo de Troya , aunque los caballos de Troya de JavaScript son poco comunes en la práctica. [ 108 ]
Vulnerabilidades de hardware
En 2015, investigadores de seguridad describieron en un artículo una implementación de prueba de concepto basada en JavaScript de un ataque rowhammer . [ 109 ] [ 110 ] [ 111 ] [ 112 ]
En 2017, se demostró un ataque basado en JavaScript a través del navegador que podía eludir ASLR . Se denomina "ASLR⊕Cache" o AnC. [ 113 ] [ 114 ]
En 2018, el documento que anunciaba los ataques Spectre contra la ejecución especulativa en procesadores Intel y otros incluía una implementación en JavaScript. [ 115 ]
Herramientas de desarrollo
Las herramientas importantes han evolucionado junto con el idioma.
- Todos los navegadores web principales incluyen herramientas de desarrollo web integradas , incluido un depurador de JavaScript .
- Las herramientas de análisis estático de programas , como ESLint y JSLint , examinan el código JavaScript para comprobar si cumple con un conjunto de estándares y directrices.
- Algunos navegadores tienen analizadores de rendimiento integrados . También se han creado bibliotecas de análisis de rendimiento independientes, como benchmark.js y jsbench. [ 116 ] [ 117 ]
- Muchos editores de texto ofrecen soporte para el resaltado de sintaxis en código JavaScript.
Tecnologías relacionadas
Java
Una idea errónea común es que JavaScript está directamente relacionado con Java . Ambos, en efecto, tienen una sintaxis similar a la de C (siendo C su antecesor común más inmediato). También suelen estar aislados en un entorno seguro (sandboxMath ), y JavaScript fue diseñado teniendo en cuenta la sintaxis y la biblioteca estándar de Java. En particular, todas las palabras clave de Java estaban reservadas en el JavaScript original, la biblioteca estándar de JavaScript sigue las convenciones de nomenclatura de Java, y los objetos de JavaScript Datese basan en clases de Java 1.0. [ 118 ]
Ambos lenguajes aparecieron por primera vez en 1995, pero Java fue desarrollado por James Gosling de Sun Microsystems y JavaScript por Brendan Eich de Netscape Communications.
Las diferencias entre ambos lenguajes son más notables que sus similitudes. Java tiene tipado estático , mientras que el de JavaScript es dinámico . Java se carga a partir de código de bytes compilado , mientras que JavaScript se carga como código fuente legible. Los objetos de Java se basan en clases , mientras que los de JavaScript se basan en prototipos . Finalmente, Java no admitió la programación funcional hasta Java 8, mientras que JavaScript lo ha hecho desde el principio, influenciado por Scheme .
JSON
JSON es un formato de datos derivado de JavaScript; de ahí su nombre: Notación de Objetos JavaScript. Es un formato ampliamente utilizado y compatible con muchos otros lenguajes de programación.
Transpiladores
Muchos sitios web utilizan mucho JavaScript, por lo que se han creado transpiladores para convertir el código escrito en otros lenguajes, lo que puede facilitar el proceso de desarrollo. [ 39 ]
TypeScript y CoffeeScript son dos lenguajes destacados que se transpilan a JavaScript.
WebAssembly
WebAssembly es un lenguaje más reciente con un formato de código de bytes diseñado para complementar JavaScript, especialmente las partes críticas para el rendimiento de los scripts de páginas web . Todos los principales motores de JavaScript admiten WebAssembly, [ 119 ] que se ejecuta en el mismo entorno aislado que el código JavaScript normal.
asm.js es un subconjunto de JavaScript que sirvió como precursor de WebAssembly. [ 120 ]
Notas
- ↑ / ˈ dʒ ɑː v ə s k r ɪ p t /ⓘ
- ↑ La figura incluye TypeScript , un superconjunto sintáctico estricto de JavaScript que se compila a JavaScript. El informe Octoverse 2025 de GitHub agrupa ambos lenguajes al medir su uso combinado.
Referencias
- 1 2 «Netscape y Sun anuncian JavaScript, el lenguaje de scripting de objetos abierto y multiplataforma para redes empresariales e Internet» (Comunicado de prensa). 4 de diciembre de 1995. Archivado del original el 16 de septiembre de 2007.
- ↑ "Especificación del lenguaje ECMAScript® 2024" . Junio de 2024. Consultado el 30 de agosto de 2024 .
- ↑ "Especificación del lenguaje ECMAScript® 2025" . 27 de marzo de 2024. Consultado el 17 de abril de 2024 .
- ↑ "nodejs/node-eps" . GitHub . Archivado del original el 29 de agosto de 2020. Consultado el 5 de julio de 2018 .
- 1 2 Seibel, Peter (16 de septiembre de 2009). Coders at Work: Reflections on the Craft of Programming . Apress. ISBN 978-1-4302-1948-4. Archivado del original el 24 de diciembre de 2020. Recuperado el 25 de diciembre de 2018.
Eich: La preocupación inmediata en Netscape era que debía parecerse a Java.
- 1 2 3 4 5 6 "Capítulo 4. Cómo se creó JavaScript" . speakingjs.com . Archivado del original el 27 de febrero de 2020. Consultado el 21 de noviembre de 2017 .
- ↑ «Popularidad – Brendan Eich» .
- ↑ "Brendan Eich: Una introducción a JavaScript, JSConf 2010" . YouTube . 20 de enero de 2013. pág. 22m. Archivado del original el 29 de agosto de 2020. Recuperado el 25 de noviembre de 2019.
Eich: "función", ocho letras, me influyó AWK.
- ↑ Eich, Brendan (1998). «Prólogo». En Goodman, Danny (ed.). JavaScript Bible (3.ª ed.). John Wiley & Sons . ISBN 0-7645-3188-3. LCCN 97078208 . OCLC 38888873 . OL 712205M .
- ↑ "TC39 - Especificación de JavaScript" . tc39.es. Consultado el 25 de abril de 2026 .
- ↑ "Descripción general de las tecnologías JavaScript - JavaScript | MDN" . MDN Web Docs . 27 de octubre de 2025. Consultado el 25 de abril de 2026 .
- ↑ GitHub (28 de octubre de 2025). "Octoverso 2025: Un nuevo desarrollador se une a GitHub cada segundo mientras la IA lleva a TypeScript al puesto número 1" . El blog de GitHub . Gráfico: "JavaScript y TypeScript tienen el mayor uso combinado" . Consultado el 25 de abril de 2026 .
- ↑ "TypeScript se posiciona como líder en GitHub" . InfoWorld . Consultado el 10 de julio de 2026 .
- ↑ "Encuesta a desarrolladores de Stack Overflow 2025" . Stack Overflow . Consultado el 10 de octubre de 2025 .
- ↑ "Especificación del lenguaje ECMAScript 2020" . Archivado del original el 8 de mayo de 2020. Consultado el 8 de mayo de 2020 .
- ↑ Enzer, Larry (31 de agosto de 2018). "La evolución de los navegadores web" . Desarrolladores web de Monmouth . Archivado del original el 31 de agosto de 2018. Recuperado el 31 de agosto de 2018 .
- 1 2 3 Fin JS (17 de junio de 2016), "Brendan Eich – CEO de Brave" , YouTube , consultado el 7 de febrero de 2018
- ↑ "Netscape Communications Corp.", Mejoras del navegador. Encyclopædia Britannica 2006 Ultimate Reference Suite DVD
- ↑ "TechVision: Innovadores de la red: Brendan Eich y JavaScript" . Archivado del original el 8 de febrero de 2008.
- 1 2 Han, Sheon (4 de marzo de 2024). "JavaScript domina el mundo, tal vez incluso literalmente" . Wired . Recuperado el 21 de agosto de 2024 .
- 1 2 "Capítulo 5. Estandarización: ECMAScript" . speakingjs.com . Archivado del original el 1 de noviembre de 2021. Recuperado el 1 de noviembre de 2021 .
- 1 2 Champeon, Steve (6 de abril de 2001). "JavaScript, ¿cómo llegamos hasta aquí?" . oreilly.com . Archivado del original el 19 de julio de 2016 . Recuperado el 16 de julio de 2016 .
- ↑ "Microsoft Internet Explorer 3.0 Beta ya disponible" . microsoft.com . Microsoft. 29 de mayo de 1996. Archivado del original el 24 de noviembre de 2020. Consultado el 16 de julio de 2016 .
- ↑ McCracken, Harry (16 de septiembre de 2010). "El regreso indeseado de "Se recomienda visualizar con Internet Explorer"" . technologizer.com . Archivado del original el 23 de junio de 2018 . Consultado el 16 de julio de 2016 .
- ↑ Baker, Loren (24 de noviembre de 2004). "La cuota de mercado del navegador de Internet Mozilla Firefox aumenta al 7,4 %" . Search Engine Journal . Archivado del original el 7 de mayo de 2021. Consultado el 8 de mayo de 2021 .
- ↑ Weber, Tim (9 de mayo de 2005). "El ataque al gigante del software Microsoft" . BBC News . Archivado del original el 25 de septiembre de 2017.
- ↑ "Prueba comparativa de navegadores: Internet Explorer vs. Firefox, Opera, Safari y Chrome" . PC Games Hardware . Computec Media AG. 3 de julio de 2009. Archivado del original el 2 de mayo de 2012. Consultado el 28 de junio de 2010 .
- ↑ Purdy, Kevin (11 de junio de 2009). "Pruebas de velocidad de Lifehacker: Safari 4, Chrome 2" . Lifehacker . Archivado del original el 14 de abril de 2021. Consultado el 8 de mayo de 2021 .
- ↑ "TraceMonkey: JavaScript Lightspeed, Blog de Brendan Eich" . Archivado del original el 4 de diciembre de 2015. Consultado el 22 de julio de 2020 .
- ↑ "Mozilla pregunta: '¿Ya somos rápidos?'"" . Wired . Archivado del original el 22 de junio de 2018 . Consultado el 18 de enero de 2019 .
- ↑ "ECMAScript 6: Nuevas características: Descripción general y comparación" . es6-features.org . Archivado del original el 18 de marzo de 2018. Consultado el 19 de marzo de 2018 .
- ↑ Node.js profesional: Creación de software escalable basado en JavaScript. Archivado el 24 de marzo de 2017 en Wayback Machine , John Wiley & Sons, 1 de octubre de 2012.
- ↑ Sams Teach Yourself Node.js in 24 Hours Archivado el 23/03/2017 en Wayback Machine , Sams Publishing, 05/09/2012
- ↑ Lawton, George (19 de julio de 2018). "La historia secreta detrás del éxito de npm y Node" . TheServerSide . Archivado del original el 2 de agosto de 2021. Recuperado el 2 de agosto de 2021 .
- ↑ Brown, Paul (13 de enero de 2017). "Estado de la Unión: npm" . Linux.com . Archivado del original el 2 de agosto de 2021. Recuperado el 2 de agosto de 2021 .
- 1 2 3 Branscombe, Mary (4 de mayo de 2016). "El estándar de JavaScript pasa a tener un calendario de lanzamiento anual; esto es lo nuevo para ES16" . The New Stack . Archivado del original el 16 de enero de 2021. Recuperado el 15 de enero de 2021 .
- ↑ "El proceso TC39" . tc39.es. Ecma International. Archivado del original el 7 de febrero de 2021. Consultado el 15 de enero de 2021 .
- ↑ "Propuestas de ECMAScript" . TC39. Archivado del original el 4 de diciembre de 2020. Consultado el 15 de enero de 2021 .
- 1 2 Ashkenas, Jeremy . "Lista de lenguajes que compilan a JS" . GitHub . Archivado del original el 31 de enero de 2020. Recuperado el 6 de febrero de 2020 .
- 1 2 "Estadísticas de uso de JavaScript como lenguaje de programación del lado del cliente en sitios web" . W3Techs . Consultado el 27 de febrero de 2024 .
- ↑ "Marca comercial estadounidense n.° 75026640" . uspto.gov . Oficina de Patentes y Marcas de los Estados Unidos . 6 de mayo de 1997. Archivado del original el 13 de julio de 2021. Consultado el 8 de mayo de 2021 .
- ↑ "Avisos legales" . oracle.com . Oracle Corporation . Archivado del original el 5 de junio de 2021. Consultado el 8 de mayo de 2021 .
- ↑ "Oracle comprará Sun en una operación de 7.400 millones de dólares" . The Economic Times . 21 de abril de 2009.
- ↑ Claburn, Thomas (17 de septiembre de 2024). "Se insta nuevamente a Oracle a renunciar a la marca registrada JavaScript" . The Register . Consultado el 2 de febrero de 2025 .
- ↑ Krill, Paul (20 de septiembre de 2024). "La comunidad de JavaScript desafía la marca registrada de JavaScript de Oracle" . InfoWorld .
- 1 2 3 "Estadísticas de uso de bibliotecas JavaScript para sitios web" . W3Techs . Consultado el 9 de abril de 2021 .
- ↑ "Uso de jQuery con Bootstrap" . clouddevs.com . 10 de junio de 2019. Consultado el 17 de marzo de 2024 .
- ↑ "Vanilla JS" . vanilla-js.com . 16 de junio de 2020. Archivado del original el 16 de junio de 2020. Consultado el 17 de junio de 2020 .
- ↑ "Guía de JavaScript del lado del servidor" . oracle.com . Oracle Corporation . 11 de diciembre de 1998. Archivado del original el 11 de marzo de 2021. Consultado el 8 de mayo de 2021 .
- ↑ Clinick, Andrew (14 de julio de 2000). "Introducción a JScript .NET" . Microsoft Developer Network . Microsoft. Archivado del original el 10 de noviembre de 2017. Recuperado el 10 de abril de 2018.
[Desde la introducción de JScript versión 1.0 en 1996... hemos visto un aumento constante en el uso de JScript en el servidor, particularmente en Active Server Pages (ASP).
- 1 2 Mahemoff, Michael (17 de diciembre de 2009). "Server-Side JavaScript, Back with a Vengeance" . readwrite.com . Archivado del original el 17 de junio de 2016. Recuperado el 16 de julio de 2016 .
- ↑ "JavaScript para Acrobat" . adobe.com . 7 de agosto de 2009. Archivado del original el 7 de agosto de 2009. Consultado el 18 de agosto de 2009 .
- ↑ treitter (2 de febrero de 2013). "Respondiendo a la pregunta: "¿Cómo desarrollo una aplicación para GNOME?"" . livejournal.com . Archivado del original el 11 de febrero de 2013 . Consultado el 7 de febrero de 2013 .
- ↑ Ponge, Julien (19 de abril de 2018). "Oracle Nashorn: Un motor JavaScript de próxima generación para la JVM" . oracle.com . Oracle Corporation . Consultado el 17 de febrero de 2025 .
- ↑ "Guía de migración de Nashorn a GraalJS" . graalvm.org . Consultado el 17 de febrero de 2025 .
- ↑ "GraalJS" . GraalVM . Consultado el 17 de febrero de 2025 .
- ↑ "Interoperabilidad de Java" . oracle.com . Oracle . Consultado el 17 de febrero de 2025 .
- ↑ "Tessel 2... Aprovecha todas las bibliotecas de Node.JS para crear dispositivos útiles en minutos con Tessel" . tessel.io . Archivado del original el 26 de mayo de 2021. Consultado el 8 de mayo de 2021 .
- ↑ "Introducción a Node.js y GPIO en Raspberry Pi" . w3schools.com . Archivado del original el 13 de agosto de 2021. Consultado el 3 de mayo de 2020 .
- ↑ "Espruino – JavaScript para microcontroladores" . espruino.com . Archivado del original el 1 de mayo de 2020. Consultado el 3 de mayo de 2020 .
- ↑ Looper, Jen (21 de septiembre de 2015). "Una guía de motores JavaScript para principiantes" . Telerik Developer Network. Archivado del original el 8 de diciembre de 2018. Recuperado el 8 de diciembre de 2018 .
- ↑ "Cómo funciona Blink" . Consultado el 12 de marzo de 2024 .
- 1 2 "Documentación · V8" . Google . Consultado el 3 de marzo de 2024 .
- ↑ Nelaturu, Keerthi (septiembre de 2020). "WebAssembly: ¿Cuál es el gran problema?" . medium.com . Consultado el 3 de marzo de 2024 .
- ↑ "Modelo de concurrencia y bucle de eventos" . Mozilla Developer Network . Archivado del original el 5 de septiembre de 2015. Consultado el 28 de agosto de 2015 .
- ↑ Flanagan, David (17 de agosto de 2006). JavaScript: La guía definitiva . O'Reilly Media, Inc. pág. 16. ISBN 978-0-596-55447-7Archivado del original el 1 de agosto de 2020. Consultado el 29 de marzo de 2019 .
- 1 2 3 4 Korolev, Mikhail (1 de marzo de 2019). "Peculiaridades de JavaScript en una imagen de Internet" . La comunidad DEV . Archivado del original el 28 de octubre de 2019. Recuperado el 28 de octubre de 2019 .
- ↑ "Proposal-bigint/ADVANCED.md en master · tc39/Proposal-bigint" . GitHub .
- ↑ Bernhardt, Gary (2012). "Wat" . Destroy All Software . Archivado del original el 28 de octubre de 2019. Recuperado el 28 de octubre de 2019 .
- ↑ "Tipos de datos y estructuras de datos de JavaScript" . MDN . 16 de febrero de 2017. Archivado del original el 14 de marzo de 2017. Consultado el 24 de febrero de 2017 .
- ↑ Flanagan 2006 , págs. 176–178.
- ↑ Crockford, Douglas. "Herencia prototípica en JavaScript" . Archivado del original el 13 de agosto de 2013. Recuperado el 20 de agosto de 2013 .
- ↑ "Herencia y la cadena de prototipos" . Mozilla Developer Network . Archivado del original el 25 de abril de 2013. Consultado el 6 de abril de 2013 .
- ↑ Herman, David (2013). Effective JavaScript . Addison-Wesley. pág. 83. ISBN 978-0-321-81218-6.
- ^ Gandhi, Raju (2019). JavaScript Siguiente . Ciudad de Nueva York: Apress Media. págs. 159-171 . ISBN 978-1-4842-5394-6.
- ^ Haverbeke , Marijn (septiembre de 2024). JavaScript elocuente (PDF) (4ª ed.). San Francisco: sin prensa de almidón . págs. 97–98 . ISBN 978-1-71850-411-0Archivado (PDF) del original el 12 de marzo de 2025 .
- ↑ Katz, Yehuda (12 de agosto de 2011). "Comprendiendo los "prototipos" en JavaScript" . Archivado del original el 5 de abril de 2013. Recuperado el 6 de abril de 2013 .
- ↑ Herman, David (2013). Effective JavaScript . Addison-Wesley. pp. 125–127 . ISBN 978-0-321-81218-6.
- ↑ "Función – JavaScript" . MDN Web Docs . Consultado el 30 de octubre de 2021 .
- ↑ "Propiedades del objeto de función" . Es5.github.com. Archivado del original el 28 de enero de 2013. Consultado el 26 de mayo de 2013 .
- ↑ Flanagan 2006 , pág. 141.
- ↑ Los muchos talentos de JavaScript para generalizar enfoques de programación orientada a roles como Traits y Mixins Archivado el 5 de octubre de 2017 en Wayback Machine , Peterseliger.blogspot.de, 11 de abril de 2014.
- ↑ Traits for JavaScript Archivado el 24/07/2014 en Wayback Machine , 2010.
- ↑ "Inicio | CocktailJS" . Cocktailjs.github.io . Archivado del original el 4 de febrero de 2017. Consultado el 24 de febrero de 2017 .
- ↑ Croll, Angus (31 de mayo de 2011). "Una nueva perspectiva sobre los mixins de JavaScript" . JavaScript, JavaScript… . Archivado del original el 15 de abril de 2020.
- ↑ "E4X – Archivo de contenido obsoleto" . Mozilla Developer Network . Mozilla Foundation. 14 de febrero de 2014. Archivado del original el 24 de julio de 2014. Consultado el 13 de julio de 2014 .
- ↑ "var – JavaScript" . La Red de Desarrolladores de Mozilla . Archivado del original el 23 de diciembre de 2012. Consultado el 22 de diciembre de 2012 .
- ↑ "let" . Documentación web de MDN . Mozilla. Archivado del original el 28 de mayo de 2019. Consultado el 27 de junio de 2018 .
- ↑ "const" . Documentación web de MDN . Mozilla. Archivado del original el 28 de junio de 2018. Consultado el 27 de junio de 2018 .
- ↑ "Cómo hacer que JavaScript sea seguro para la publicidad" . ADsafe. Archivado del original el 6 de julio de 2021. Consultado el 8 de mayo de 2021 .
- ↑ "Script ECMA seguro (SES)" . Archivado del original el 15 de mayo de 2013. Consultado el 26 de mayo de 2013 .
- ↑ "Proyecto Google Caja" . Google . Archivado del original el 22 de enero de 2021. Consultado el 9 de julio de 2021 .
- ↑ "Se reporta y soluciona una vulnerabilidad de secuencias de comandos entre sitios en Mozilla – MozillaZine Talkback" . Mozillazine.org . Archivado del original el 21 de julio de 2011. Consultado el 24 de febrero de 2017 .
- ↑ Kottelin, Thor (17 de junio de 2008). "¿Protección con clic derecho? Olvídalo" . blog.anta.net . Archivado del original el 9 de agosto de 2011. Consultado el 28 de julio de 2022 .
- ↑ Rehorik, Jan (29 de noviembre de 2016). "Por qué nunca debes poner datos confidenciales en tu JavaScript" . Blog de ServiceObjects . ServiceObjects. Archivado del original el 3 de junio de 2019. Recuperado el 3 de junio de 2019 .
- ^ Lauinger , Tobías; Chaabane, Abdelberi; Arshad, Sajjad; Robertson, William; Wilson, Cristo; Kirda, Engin (21 de diciembre de 2016), "No dependerás de mí: análisis del uso de bibliotecas JavaScript obsoletas en la Web" (PDF) , Northeastern University , arXiv : 1811.00918 , doi : 10.14722/ndss.2017.23414 , ISBN 978-1-891562-46-4, S2CID 17885720 , archivado desde el original (PDF) el 29 de marzo de 2017 , recuperado el 28 de julio de 2022
- ↑ Collins, Keith (27 de marzo de 2016). "Cómo un programador rompió internet borrando un pequeño fragmento de código" . Quartz . Archivado del original el 22 de febrero de 2017. Recuperado el 22 de febrero de 2017 .
- ↑ Revista SC del Reino Unido, Once líneas de código eliminadas por un desarrollador "rompen internet". Archivado el 23 de febrero de 2017 en Wayback Machine .
- ↑ Mozilla Corporation, Desbordamiento de búfer en crypto.signText() Archivado el 4 de junio de 2014 en Wayback Machine
- ↑ Festa, Paul (19 de agosto de 1998). "Error de desbordamiento de búfer en IE" . CNET . Archivado del original el 25 de diciembre de 2002.
- ↑ SecurityTracker.com, Desbordamiento de búfer de JavaScript en Apple Safari permite a usuarios remotos ejecutar código arbitrario y error de redirección HTTP permite a usuarios remotos acceder a archivos. Archivado el 18/02/2010 en Wayback Machine.
- ↑ SecurityFocus, Vulnerabilidad de desbordamiento de búfer de control ActiveX en Microsoft WebViewFolderIcon. Archivado el 11/10/2011 en Wayback Machine.
- ↑ Fusion Authority, Desbordamiento de búfer ActiveX de Macromedia Flash. Archivado el 13 de agosto de 2011 en Wayback Machine .
- ↑ "Modo protegido en Vista IE7 – IEBlog" . Blogs.msdn.com . 9 de febrero de 2006. Archivado del original el 23 de enero de 2010. Consultado el 24 de febrero de 2017 .
- ↑ US CERT, Nota de vulnerabilidad VU#713878: Microsoft Internet Explorer no valida correctamente el origen de un marco redirigido. Archivado el 30/10/2009 en Wayback Machine.
- ↑ Fundación Mozilla, Aviso de seguridad de la Fundación Mozilla 2005–41: Escalada de privilegios mediante anulaciones de propiedades DOM. Archivado el 4 de junio de 2014 en Wayback Machine.
- ↑ Andersen, Starr (9 de agosto de 2004). "Parte 5: Seguridad de navegación mejorada" . TechNet . Microsoft Docs . Cambios en la funcionalidad de Windows XP Service Pack 2. Consultado el 20 de octubre de 2021 .
- ↑ Para ver un ejemplo de un troyano JavaScript poco común, consulte Symantec Corporation, JS.Seeker.K. Archivado el 13 de septiembre de 2011 en Wayback Machine.
- ↑ Gruss, Daniel; Maurice, Clémentine; Mangard, Stefan (24 de julio de 2015). "Rowhammer.js: Un ataque remoto de fallos inducidos por software en JavaScript". arXiv : 1507.06955 [ cs.CR ].
- ↑ Jean-Pharuns, Alix (30 de julio de 2015). "Rowhammer.js es el hack más ingenioso que he visto jamás" . Motherboard . Vice . Archivado del original el 27 de enero de 2018. Recuperado el 26 de enero de 2018 .
- ↑ Goodin, Dan (4 de agosto de 2015). "Exploit de 'Bitflipping' de DRAM para atacar PCs: solo agrega JavaScript" . Ars Technica . Archivado del original el 27 de enero de 2018. Recuperado el 26 de enero de 2018 .
- ↑ Auerbach, David (28 de julio de 2015). "Vulnerabilidad de seguridad Rowhammer: Por qué un nuevo ataque de seguridad es realmente aterrador" . slate.com . Archivado del original el 30 de julio de 2015. Recuperado el 29 de julio de 2015 .
- ↑ AnC Archivado el 16 de marzo de 2017 en Wayback Machine VUSec, 2017
- ↑ El nuevo JavaScript que burla ASLR está a punto de hacer que los exploits de drive-by sean mucho más peligrosos. Archivado el 16 de marzo de 2017 en Wayback Machine. Ars Technica, 2017.
- ↑ Ataque Espectral Archivado el 3 de enero de 2018 en Wayback Machine Ataque Espectral
- ↑ "Benchmark.js" . benchmarkjs.com . Archivado del original el 19 de diciembre de 2016. Consultado el 6 de noviembre de 2016 .
- ↑ JSBEN.CH. "JSBEN.CH Performance Benchmarking Playground for JavaScript" . jsben.ch . Archivado del original el 27 de febrero de 2021. Consultado el 13 de agosto de 2021 .
- ↑ Eich, Brendan (3 de abril de 2008). "Popularidad" . Archivado del original el 3 de julio de 2011. Recuperado el 19 de enero de 2012 .
- ↑ "El navegador Edge activa WebAssembly -- Visual Studio Magazine" . Visual Studio Magazine . Archivado del original el 10 de febrero de 2018. Consultado el 9 de febrero de 2018 .
- ↑ "preguntas frecuentes" . asm.js. Archivado del original el 4 de junio de 2014. Consultado el 13 de abril de 2014 .
Lecturas adicionales
- Flanagan, David (2020). JavaScript: La guía definitiva (7.ª ed.). Sebastopol, California: O'Reilly. ISBN 978-1-491-95202-3.
- Haverbeke, Marijn (2024). JavaScript elocuente (PDF) (4ª ed.). San Francisco: sin prensa de almidón . ISBN 978-1-71850-411-0Archivado (PDF) del original el 12 de marzo de 2025 .
- Zakas, Nicholas (2014). Principios de JavaScript orientado a objetos (1.ª ed.). No Starch Press. ISBN 978-1-59327-540-2.
Enlaces externos
- El Tutorial Moderno de JavaScript . Una colección de tutoriales sobre todo el lenguaje, mantenida por la comunidad y actualizada continuamente.
- "JavaScript: Los primeros 20 años" . Consultado el 6 de febrero de 2022 .
- JavaScript
- Inventos estadounidenses
- Software multiplataforma
- Lenguajes de programación de tipado dinámico
- Lenguajes funcionales
- Lenguajes de programación orientados a objetos
- Lenguajes de programación de alto nivel
- Lenguajes de programación creados en 1995
- Lenguajes de programación con un estándar ISO
- Lenguajes de programación basados en prototipos
- Lenguajes de scripting
- Programación web
- Lenguajes de programación