Ir a la navegaciónIr a la búsquedaJavaScript
Información generalParadigma
Mult
iparadigma, programación funcional,1 programación basada en prot
ot
ipos, imperat
ivo, int
erpret
ado (script
ing)
Apareció en 1995
Diseñado por Net
scape Communicat
ions Corp, Mozilla Fundat
ionÚlt
ima versión est
able ECMAScript
2016; (17 de junio de 2016 (2 años, 1 mes y 27 días)
)
Sist
ema de t
ipos Débil, dinámico, duck
Implement
aciones SpiderMonk
ey, Rhino, KJS, JavaScript
Core, V8, Chak
ra. Dialect
os ECMAScript
Influido por Java, Perl, Self, Pyt
hon, C, SchemeHa influido a Object
iveJ, JScript
, JScript
.NET, TIScript
[edit
ar dat
os en Wik
idat
a] JavaScript
Unofficial JavaScript
logo 2.svgBrendan EichInformación generalExt
ensión de archivo .jsTipo de MIME applicat
ion/javascript
, t
ext
/javascript
2Tipo de format
o Script
ingExt
endido de ECMAScript
Format
o abiert
o ?
[edit
ar dat
os en Wik
idat
a]JavaScript
(abreviado comúnment
e JS)
es un lenguaje de programación int
erpret
ado, dialect
o del est
ándar ECMAScript
. Se define como orient
ado a objet
os,3 basado en prot
ot
ipos, imperat
ivo, débilment
e t
ipado y dinámico.Se ut
iliza principalment
e en su forma del lado del client
e (client
-side)
, implement
ado como part
e de un navegador web permit
iendo mejoras en la int
erfaz de usuario y páginas web dinámicas4 aunque exist
e una forma de JavaScript
del lado del servidor(Server- side JavaScript
o SSJS)
. Su uso en aplicaciones ext
ernas a la web, por ejemplo en document
os PDF, aplicaciones de escrit
orio (mayorit
ariament
e widget
s)
es t
ambién significat
ivo.Desde el 2012, t
odos los navegadores modernos soport
an complet
ament
e ECMAScript
5
.1, una versión de javascript
. Los navegadores más ant
iguos soport
an por lo menos ECMAScript
3. La sext
a edición se liberó en julio del 2015
.5
JavaScript
se diseñó con una sint
axis similar a C, aunque adopt
a nombres y convenciones del lenguaje de programación Java. Sin embargo, Java y JavaScript
t
ienen semánt
icas y propósit
os diferent
es.Todos los navegadores modernos int
erpret
an el código JavaScript
int
egrado en las páginas web. Para int
eract
uar con una página web se provee al lenguaje JavaScript
de una implement
ación del Document
Object
Model (DOM)
.Tradicionalment
e se venía ut
ilizando en páginas web HTML para realizar operaciones y únicament
e en el marco de la aplicación client
e, sin acceso a funciones del servidor. Act
ualment
e es ampliament
e ut
ilizado para enviar y recibir información del servidor junt
o con ayuda de ot
ras t
ecnologías como AJAX. JavaScript
se int
erpret
a en el agent
e de usuario al mismo t
iempo que las sent
encias van descargándose junt
o con el código HTML.Desde el lanzamient
o en junio de 1997 del est
ándar ECMAScript
1, han exist
ido las versiones 2, 3 y 5
, que es la más usada act
ualment
e (la 4 se abandonó6)
. En junio de 2015
se cerró y publicó la versión ECMAScript
6.7Índice1 Hist
oria1.1 Nacimient
o de JavaScript
1.2 JavaScript
en el lado servidor1.3 Desarrollos post
eriores2 Caract
eríst
icas2.1 Imperat
ivo y est
ruct
urado2.2 Dinámico2.3 Funcional2.4 Prot
ot
ípico2.5
Ot
ras caract
eríst
icas2.6 Ext
ensiones específicas del fabricant
e3 Sint
axis y semánt
ica3.1 Ejemplos sencillos3.2 Ejemplos más avanzados4 Uso en páginas web 4.1 Ejemplo de script
4.2 Consideraciones acerca de la compat
ibilidad4.3 Accesibilidad5
Seguridad5
.1 Vulnerabilidades cross-sit
e6 Herramient
as de desarrollo7 Véase t
ambién8 Referencias9 Bibliografía10 Enlaces ext
ernosHist
oriaNacimient
o de JavaScript
JavaScript
fue desarrollado originalment
e por Brendan Eich de Net
scape con el nombre de Mocha, el cual fue renombrado post
eriorment
e a LiveScript
, para finalment
e quedar como JavaScript
. El cambio de nombre coincidió aproximadament
e con el moment
o en que Net
scape agregó compat
ibilidad con la t
ecnología Java en su navegador web Net
scape Navigat
or en la versión 2.002 en diciembre de 1995
. La denominación produjo confusión, dando la impresión de que el lenguaje es una prolongación de Java, y se ha caract
erizado por muchos como una est
rat
egia de mercadot
ecnia de Net
scape para obt
ener prest
igio e innovar en el ámbit
o de los nuevos lenguajes de programación web.89«JAVASCRIPT» es una marca regist
rada de Oracle Corporat
ion.10 Es usada con licencia por los product
os creados por Net
scape Communicat
ions y ent
idades act
uales como la Fundación Mozilla.1112Microsoft
dio como nombre a su dialect
o de JavaScript
«JScript
», para evit
ar problemas relacionadas con la marca. JScript
fue adopt
ado en la versión 3.0 de Int
ernet
Explorer, liberado en agost
o de 1996, e incluyó compat
ibilidad con el Efect
o 2000 con las funciones de fecha, una diferencia de los que se basaban en ese moment
o. Los dialect
os pueden parecer t
an similares que los t
érminos «JavaScript
» y «JScript
» a menudo se ut
ilizan indist
int
ament
e, pero la especificación de JScript
es incompat
ible con la de ECMA en muchos aspect
os.Para evit
ar est
as incompat
ibilidades, el World Wide Web Consort
ium diseñó el est
ándar Document
Object
Model (DOM, o Modelo de Objet
os del Document
o en español)
, que incorporan Konqueror, las versiones 6 de Int
ernet
Explorer y Net
scape Navigat
or, Opera la versión 7, Mozilla Applicat
ion Suit
e y Mozilla Firefox desde su primera versión.[cit
a requerida]En 1997 los aut
ores propusieron13 JavaScript
para que fuera adopt
ado como est
ándar de la European Comput
er Manufact
urers 'Associat
ion ECMA, que a pesar de su nombre no es europeo sino int
ernacional, con sede en Ginebra. En junio de 1997 fue adopt
ado como un est
ándar ECMA, con el nombre de ECMAScript
. Poco después t
ambién como un est
ándar ISO.JavaScript
en el lado servidorNet
scape int
rodujo una implement
ación de script
del lado del servidor con Net
scape Ent
erprise Server, lanzada en diciembre de 1994 (poco después del lanzamient
o de JavaScript
para navegadores web)
.1415
A part
ir de mediados de la década de los 2000, ha habido una proliferación de implement
aciones de JavaScript
para el lado servidor. Node.js es uno de los not
ables ejemplos de JavaScript
en el lado del servidor, siendo usado en proyect
os import
ant
es.1617Desarrollos post
eriores JavaScript
se ha convert
ido en uno de los lenguajes de programación más populares en int
ernet
. Al principio, sin embargo, muchos desarrolladores renegaban del lenguaje porque el público al que va dirigido lo formaban publicadores de art
ículos y demás aficionados, ent
re ot
ras razones.18 La llegada de Ajax devolvió JavaScript
a la fama y at
rajo la at
ención de muchos ot
ros programadores. Como result
ado de est
o hubo una proliferación de un conjunt
o de framework
s y librerías de ámbit
o general, mejorando las práct
icas de programación con JavaScript
, y aument
ado el uso de JavaScript
fuera de los navegadores web, como se ha vist
o con la proliferación de ent
ornos JavaScript
del lado del servidor. En enero de 2009, el proyect
o CommonJS fue inaugurado con el objet
ivo de especificar una librería para uso de t
areas comunes principalment
e para el desarrollo fuera del navegador web.19En junio de 2015
se cerró y publicó el est
ándar ECMAScript
62021 con un soport
e irregular ent
re navegadores22 y que dot
a a JavaScript
de caract
eríst
icas avanzadas que se echaban de menos y que son de uso habit
ual en ot
ros lenguajes como, por ejemplo, módulos para organización del código, verdaderas clases para programación orient
ada a objet
os, expresiones de flecha, it
eradores, generadores o promesas para programación asíncrona.La versión 7 de ECMAScript
se conoce como ECMAScript
2016,23 y es la últ
ima versión disponible, publicada en junio de 2016. Se t
rat
a de la primera versión para la que se usa un nuevo procedimient
o de publicación anual y un proceso de desarrollo abiert
o.24Caract
eríst
icasLas siguient
es caract
eríst
icas son comunes a t
odas las implement
aciones que se ajust
an al est
ándar ECMAScript
, a menos que especifique explícit
ament
e en caso cont
rario.Imperat
ivo y est
ruct
urado JavaScript
es compat
ible con gran part
e de la est
ruct
ura de programación de C (por ejemplo, sent
encias if, bucles for, sent
encias swit
ch, et
c.)
. Con una salvedad, en part
e: en C, el ámbit
o de las variables alcanza al bloque en el cual fueron definidas; sin embargo JavaScript
no es compat
ible con est
o, puest
o que el ámbit
o de las variables es el de la función en la cual fueron declaradas. Est
o cambia con la versión de ECMAScript
2015
, ya que añade compat
ibilidad con block
scoping por medio de la palabra clave let
. Como en C, JavaScript
hace dist
inción ent
re expresiones y sent
encias. Una diferencia sint
áct
ica con respect
o a C es la inserción aut
omát
ica de punt
o y coma, es decir, en JavaScript
los punt
os y coma que finalizan una sent
encia pueden ser omit
idos.25
DinámicoTipado dinámicoComo en la mayoría de lenguajes de script
ing, el t
ipo est
á asociado al valor, no a la variable. Por ejemplo, una variable x en un moment
o dado puede est
ar ligada a un número y más adelant
e, religada a una cadena. JavaScript
es compat
ible con varias formas de comprobar el t
ipo de un objet
o, incluyendo duck
t
yping.26 Una forma de saberlo es por medio de la palabra clave t
ypeof.Objet
ualJavaScript
est
á formado casi en su t
ot
alidad por objet
os. Los objet
os en JavaScript
son arrays asociat
ivos, mejorados con la inclusión de prot
ot
ipos (ver más adelant
e)
. Los nombres de las propiedades de los objet
os son claves de t
ipo cadena: obj.x = 10 y obj['x'] = 10 son equivalent
es, siendo azúcar sint
áct
ico la not
ación con punt
o. Las propiedades y sus valores pueden ser creados, cambiados o eliminados en t
iempo de ejecución. La mayoría de propiedades de un objet
o (y aquellas que son incluidas por la cadena de la herencia prot
ot
ípica)
pueden ser enumeradas a por medio de la inst
rucción de bucle for... in. JavaScript
t
iene un pequeño número de objet
os predefinidos como son Funct
ion y Dat
e.Evaluación en t
iempo de ejecuciónJavaScript
incluye la función eval que permit
e evaluar expresiones expresadas como cadenas en t
iempo de ejecución. Por ello se recomienda que eval sea ut
ilizado con precaución y que se opt
e por ut
ilizar la función JSON.parse()
en la medida de lo posible, pues result
a mucho más segura.FuncionalFunciones de primera claseA las funciones se les suele llamar ciudadanos de primera clase; son objet
os en sí mismos. Como t
al, poseen propiedades y mét
odos, como .call()
y .bind()
.27 Una función anidada es una función definida dent
ro de ot
ra. Est
a es creada cada vez que la función ext
erna es invocada. Además, cada función creada forma una clausura; es el result
ado de evaluar un ámbit
o cont
eniendo en una o más variables dependient
es de ot
ro ámbit
o ext
erno, incluyendo const
ant
es, variables locales y argument
os de la función ext
erna llamant
e. El result
ado de la evaluación de dicha clausura forma part
e del est
ado int
erno de cada objet
o función, incluso después de que la función ext
erior concluya su evaluación.28Prot
ot
ípicoProt
ot
iposJavaScript
usa prot
ot
ipos en vez de clases para el uso de herencia.29 Es posible llegar a emular muchas de las caract
eríst
icas que proporcionan las clases en lenguajes orient
ados a objet
os t
radicionales por medio de prot
ot
ipos en JavaScript
.30Funciones como const
ruct
ores de objet
osLas funciones t
ambién se comport
an como const
ruct
ores. Prefijar una llamada a la función con la palabra clave new crear una nueva inst
ancia de un prot
ot
ipo, que heredan propiedades y mét
odos del const
ruct
or (incluidas las propiedades del prot
ot
ipo de Object
)
.31 ECMAScript
5
ofrece el mét
odo Object
.creat
e, permit
iendo la creación explícit
a de una inst
ancia sin t
ener que heredar aut
omát
icament
e del prot
ot
ipo de Object
(en ent
ornos ant
iguos puede aparecer el prot
ot
ipo del objet
o creado como null)
.32 La propiedad prot
ot
ype del const
ruct
or det
ermina el objet
o usado para el prot
ot
ipo int
erno de los nuevos objet
os creados. Se pueden añadir nuevos mét
odos modificando el prot
ot
ipo del objet
o usado como const
ruct
or. Const
ruct
ores predefinidos en JavaScript
, como Array u Object
, t
ambién t
ienen prot
ot
ipos que pueden ser modificados. Aunque est
o sea posible se considera una mala práct
ica modificar el prot
ot
ipo de Object
ya que la mayoría de los objet
os en Javascript
heredan los mét
odos y propiedades del objet
o prot
ot
ype, objet
os los cuales pueden esperar que est
os no hayan sido modificados.33Ot
ras caract
eríst
icasEnt
orno de ejecuciónJavaScript
normalment
e depende del ent
orno en el que se ejecut
e (por ejemplo, en un navegador web)
para ofrecer objet
os y mét
odos por los que los script
s pueden int
eract
uar con el "mundo ext
erior". De hecho, depende del ent
orno para ser capaz de proporcionar la capacidad de incluir o import
ar script
s (por ejemplo, en HTML por medio del t
ag <script
>)
. (Est
o no es una caract
eríst
ica del lenguaje, pero es común en la mayoría de las implement
aciones de JavaScript
.)
Funciones variádicasUn número indefinido de parámet
ros pueden ser pasados a la función. La función puede acceder a ellos a t
ravés de los parámet
ros o t
ambién a t
ravés del objet
o local argument
s. Las funciones variádicas t
ambién pueden ser creadas usando el mét
odo .apply()
.Funciones como mét
odosA diferencia de muchos lenguajes orient
ados a objet
os, no hay dist
inción ent
re la definición de función y la definición de mét
odo. Más bien, la dist
inción se produce durant
e la llamada a la función; una función puede ser llamada como un mét
odo. Cuando una función es llamada como un mét
odo de un objet
o, la palabra clave t
his, que es una variable local a la función, represent
a al objet
o que invocó dicha función.Arrays y la definición lit
eral de objet
osAl igual que muchos lenguajes de script
, arrays y objet
os (arrays asociat
ivos en ot
ros idiomas)
pueden ser creados con una sint
axis abreviada. De hecho, est
os lit
erales forman la base del format
o de dat
os JSON. Expresiones regularesJavaScript
t
ambién es compat
ible con expresiones regulares de una manera similar a Perl, que proporcionan una sint
axis concisa y poderosa para la manipulación de t
ext
o que es más sofist
icado que las funciones incorporadas a los objet
os de t
ipo st
ring.34Ext
ensiones específicas del fabricant
eJavaScript
se encuent
ra oficialment
e bajo la organización de Mozilla Foundat
ion, y periódicament
e se añaden nuevas caract
eríst
icas del lenguaje. Sin embargo, sólo algunos mot
ores JavaScript
son compat
ibles con est
as caract
eríst
icas:Las propiedades get
y set
(t
ambién compat
ibles con WebKit
, Opera,35
Act
ionScript
y Rhino)
.36Cláusulas cat
ch condicionales.Prot
ocolo it
erador adopt
ado de Pyt
hon.Corrut
inas t
ambién adopt
adas de Pyt
hon.Generación de list
as y expresiones por comprensión t
ambién adopt
ado de Pyt
hon.Est
ablecer el ámbit
o a bloque a t
ravés de la palabra clave let
. Desest
ruct
uración de arrays y objet
os (forma limit
a de emparejamient
o de pat
rones)
. Expresiones concret
as en funciones (funct
ion(args)
expr)
.ECMAScript
para XML (E4X)
, una ext
ensión que añade compat
ibilidad nat
iva XML a ECMAScript
.Sint
axis y semánt
ica Art
ículo principal: Sint
axis de JavaScript
la últ
ima versión del lenguaje es ECMAScript
2016 publicada el 17 de junio del 201637Ejemplos sencillosLas variables en JavaScript
se definen usando la palabra clave var:38var x; // define la variable x, aunque no t
iene ningún valor asignado por defect
ovar y = 2; // define la variable y y le asigna el valor 2 a ellaA considerar los coment
arios en el ejemplo de arriba, los cuales van precedidos con 2 barras diagonales.No exist
en funcionalidades para I/O incluidas en el lenguaje; el ent
orno de ejecución ya lo proporciona. La especificación ECMAScript
en su edición 5
.1 hace mención:39... en efect
o, no exist
en provisiones en est
a especificación para ent
rada de dat
os ext
ernos o salida para result
ados comput
ados.Sin embargo, la mayoría de los ent
ornos de ejecución t
iene un objet
o40 llamado console que puede ser usado para imprimir por el flujo de salida de la consola de depuración. He aquí un simple programa que imprime “Hello world!”:console.log("Hello world!")
;Una función recursiva:funct
ion fact
orial(n)
{
if (n === 0)
{
ret
urn 1; }
ret
urn n * fact
orial(n - 1)
;}
Ejemplos de función anónima (o función lambda)
y una clausura:var displayClosure = funct
ion()
{
var count
= 0; ret
urn funct
ion ()
{
ret
urn ++count
; }
;}
var inc = displayClosure()
;inc()
; // devuelve 1 inc()
; // devuelve 2inc()
; // devuelve 3Las expresiones con invocación aut
omát
ica permit
en a las funciones pasarle variables por parámet
ro dent
ro de sus propias clausuras.var v;v = 1;var get
Value = (funct
ion(v)
{
ret
urn funct
ion()
{
ret
urn v;}
; }
(v)
)
;v = 2;get
Value()
; // 1Ejemplos más avanzadosEl siguient
e código muest
ra varias caract
eríst
icas de JavaScript
./* Busca el mínimo común múlt
iplo (MCM)
de dos números */funct
ion LCMCalculat
or(x, y)
{
// función const
ruct
ora var check
Int
= funct
ion (x)
{
// función int
erior if (x % 1 !== 0)
{
t
hrow new TypeError(x + " no es un ent
ero")
; // lanza una excepción }
ret
urn x; }
; t
his.a = check
Int
(x)
// punt
os y coma son opcionales t
his.b = check
Int
(y)
; }
// El prot
ot
ipo de las inst
ancias de objet
o creados por el const
ruct
or es el de la propiedad “prot
ot
ype” del const
ruct
or.LCMCalculat
or.prot
ot
ype = {
// objet
o definido como lit
eral const
ruct
or: LCMCalculat
or, // cuando reasignamos un prot
ot
ipo, est
ablecemos correct
ament
e su propiedad const
ruct
or gcd: funct
ion ()
{
// mét
odo que calcula el máximo común divisor // Algorit
mo de Euclides: var a = Mat
h.abs(t
his.a)
, b = Mat
h.abs(t
his.b)
, t
; if (a < b)
{
// int
ercambiamos variables t
= b; b = a; a = t
; }
while (b !== 0)
{
t
= b; b = a % b; a = t
; }
// Solo necesit
amos calcular el MCD una vez, por lo t
ant
o 'redefinimos' est
e mét
odo. // (Realment
e no es una redefinición—est
á definida en la propia inst
ancia, por lo t
ant
o // t
his.gcd se refiere a est
a 'redefinición' en vez de a LCMCalculat
or.prot
ot
ype.gcd)
. // Además, 'gcd' === "gcd", t
his['gcd'] === t
his.gcd t
his['gcd'] = funct
ion ()
{
ret
urn a; }
; ret
urn a; }
, // Los nombres de las propiedades del objet
o pueden ser especificados con cadenas delimit
adas con comillas simples (')
o dobles (“)
. "lcm" : funct
ion ()
{
// Los nombres de las variables no colisionan con las propiedades del objet
o. Por ejemplo: |lcm| no es |t
his.lcm|. // No usar |t
his.a * t
his.b| para evit
ar problemas con cálculos en coma flot
ant
e. var lcm = t
his.a / t
his.gcd()
* t
his.b; // Sólo necesit
amos calcular MCM una vez, por lo t
ant
o "redefinimos" est
e mét
odo. t
his.lcm = funct
ion ()
{
ret
urn lcm; }
; ret
urn lcm; }
, t
oSt
ring: funct
ion ()
{
ret
urn "LCMCalculat
or: a = " + t
his.a + ", b = " + t
his.b; }
}
;// Definimos una función genérica para imprimir un result
ado; est
a implement
ación solo funciona en los navegadores webfunct
ion out
put
(x)
{
document
.body.appendChild(document
.creat
eText
Node(x)
)
; document
.body.appendChild(document
.creat
eElement
('br')
)
;}
// Not
a: Los mét
odos.map()
y.forEach()
del prot
ot
ipo Array est
án definidos en JavaScript
1.6.// Est
os mét
odos son usados aquí para demost
rar la nat
uraleza funcional inherent
e del lenguaje.[[25
, 5
5
], [21, 5
6], [22, 5
8], [28, 5
6]].map(funct
ion (pair)
{
// const
rucción lit
eral de un Array + función de mapeo. ret
urn new LCMCalculat
or(pair[0], pair[1])
; }
)
.sort
(funct
ion (a, b)
{
// ordenamos la colección por medio de est
a función ret
urn a.lcm()
- b.lcm()
;}
)
.forEach(funct
ion (obj)
{
out
put
(obj + ", gcd = " + obj.gcd()
+ ", lcm = " + obj.lcm()
)
;}
)
;El siguient
e ejemplo muest
ra la salida que debería ser most
rada en la vent
ana de un navegador.LCMCalculat
or: a = 28, b = 5
6, gcd = 28, lcm = 5
6LCMCalculat
or: a = 21, b = 5
6, gcd = 7, lcm = 168LCMCalculat
or: a = 25
, b = 5
5
, gcd = 5
, lcm = 275
LCMCalculat
or: a = 22, b = 5
8, gcd = 2, lcm = 638Uso en páginas webVéanse t
ambién: Int
érpret
e de JavaScript
y AJAX.El uso más común de JavaScript
es escribir funciones embebidas o incluidas en páginas HTML y que int
eract
úan con el Document
Object
Model (DOM o Modelo de Objet
os del Document
o)
de la página. Algunos ejemplos sencillos de est
e uso son:Cargar nuevo cont
enido para la página o enviar dat
os al servidor a t
ravés de AJAX sin necesidad de recargar la página (por ejemplo, una red social puede permit
ir al usuario enviar act
ualizaciones de est
ado sin salir de la página)
.Animación de los element
os de página, hacerlos desaparecer, cambiar su t
amaño, moverlos, et
c.Cont
enido int
eract
ivo, por ejemplo, juegos y reproducción de audio y vídeo.Validación de los valores de ent
rada de un formulario web para asegurarse de que son acept
ables ant
es de ser enviado al servidor.Transmisión de información sobre los hábit
os de lect
ura de los usuarios y las act
ividades de navegación a varios sit
ios web. Las páginas Web con frecuencia lo hacen para hacer análisis web, seguimient
o de anuncios, la personalización o para ot
ros fines.41Dado que el código JavaScript
puede ejecut
arse localment
e en el navegador del usuario (en lugar de en un servidor remot
o)
, el navegador puede responder a las acciones del usuario con rapidez, haciendo una aplicación más sensible. Por ot
ra part
e, el código JavaScript
puede det
ect
ar acciones de los usuarios que HTML por sí sola no puede, como pulsaciones de t
eclado. Las aplicaciones como Gmail se aprovechan de est
o: la mayor part
e de la lógica de la int
erfaz de usuario est
á escrit
a en JavaScript
, enviando pet
iciones al servidor (por ejemplo, el cont
enido de un mensaje de correo elect
rónico)
. La t
endencia cada vez mayor por el uso de la programación Ajax explot
a de manera similar est
a t
écnica.Un mot
or de JavaScript
(t
ambién conocido como int
érpret
e de JavaScript
o implement
ación JavaScript
)
es un int
érpret
e que int
erpret
a el código fuent
e de JavaScript
y ejecut
a la secuencia de comandos en consecuencia. El primer mot
or de JavaScript
fue creado por Brendan Eich en Net
scape Communicat
ions Corporat
ion, para el navegador web Net
scape Navigat
or. El mot
or, denominado SpiderMonk
ey, est
á implement
ado en C. Desde ent
onces, ha sido act
ualizado (en JavaScript
1.5
)
para cumplir con el ECMA-262 edición 3. El mot
or Rhino, creado principalment
e por Norris Boyd (ant
es de Net
scape, ahora en Google)
es una implement
ación de JavaScript
en Java. Rhino, como SpiderMonk
ey, es compat
ible con el ECMA-262 edición 3.Un navegador web es, con mucho, el ent
orno de acogida más común para JavaScript
. Los navegadores web suelen crear objet
os no nat
ivos, dependient
es del ent
orno de ejecución, para represent
ar el Document
Object
Model (DOM)
en JavaScript
. El servidor web es ot
ro ent
orno común de servicios. Un servidor web JavaScript
suele exponer sus propios objet
os para represent
ar objet
os de pet
ición y respuest
a HTTP, que un programa JavaScript
podría ent
onces int
errogar y manipular para generar dinámicament
e páginas web.Debido a que JavaScript
es el único lenguaje por el que los más populares navegadores compart
en su apoyo, se ha convert
ido en un lenguaje al que muchos framework
s en ot
ros lenguajes compilan, a pesar de que JavaScript
no fue diseñado para t
ales propósit
os.42 A pesar de las limit
aciones de rendimient
o inherent
es a su nat
uraleza dinámica, el aument
o de la velocidad de los mot
ores de JavaScript
ha hecho de est
e lenguaje un ent
orno para la compilación sorprendent
ement
e fact
ible.Ejemplo de script
A cont
inuación se muest
ra un breve ejemplo de una página web (ajust
adose a las normas del est
ándar para HTML5
)
que ut
iliza JavaScript
para el manejo del DOM:<!DOCTYPE ht
ml><ht
ml><head> <met
a charset
="ut
f-8"> <t
it
le>Ejemplo sencillo</t
it
le></head><body> <h1 id="header">Est
o es JavaScript
</h1> <script
> document
.body.appendChild(document
.creat
eText
Node('Hola Mundo!')
)
; var h1 = document
.get
Element
ById('header')
; // cont
iene la referencia al t
ag <h1> h1 = document
.get
Element
sByTagName('h1')
[0]; // accediendo al mismo element
o <h1> </script
> <noscript
>Tu navegador no admit
e JavaScript
, o JavaScript
est
á deshabilit
ado.</noscript
></body></ht
ml>Consideraciones acerca de la compat
ibilidad Art
ículo principal: Int
eroperabilidad webDebido a que JavaScript
se ejecut
a en ent
ornos muy variados, una part
e import
ant
e de las pruebas y la depuración es probar y verificar que el código JavaScript
funciona correct
ament
e en múlt
iples navegadores. La int
erfaz DOM para acceder y manipular páginas web no es part
e del est
ándar ECMAScript
, o de la propia JavaScript
. El DOM es definido por los esfuerzos de est
andarización del W3C, una organización independient
e. En la práct
ica, las implement
aciones que hacen de JavaScript
los dist
int
os navegadores difieren t
ant
o ent
re ellos mismos como de las normas del est
ándar.Para hacer frent
e a est
as diferencias, los aut
ores de JavaScript
pudieron ser capaces de escribir código compat
ible con los est
ándares que t
ambién fuera capaz de ejecut
arse correct
ament
e en la mayoría de los navegadores, o en su defect
o, que al menos se pudiera escribir código capaz de comprobar la presencia de ciert
as funcionalidades del navegador y que se comport
ase de manera diferent
e si no se dispusiese de dicha funcionalidad.43 Exist
en casos en los que dos navegadores pueden llegar a implement
ar la misma caract
eríst
ica, pero con un comport
amient
o diferent
e, hecho que a los programadores les puede result
ar de ayuda para det
ect
ar qué navegador se est
á ejecut
ando en ese inst
ant
e y así cambiar el comport
amient
o de su escrit
ura para que coincida.4445
Los programadores t
ambién suelen ut
ilizar bibliot
ecas o herramient
as que t
engan en cuent
a las diferencias ent
re navegadores.Además, los script
s pueden no funcionar para algunos usuarios. Por ejemplo, un usuario puede: ut
ilizar un navegador ant
iguo sin compat
ibilidad complet
a con la API DOM,ut
ilizar un navegador PDA o t
eléfono móvil que no puede ejecut
ar JavaScript
t
ener la ejecución de JavaScript
deshabilit
ada, como precaución de seguridad,ut
ilizar un navegador de voz debido a, por ejemplo, una discapacidad visual.Para apoyar a est
os usuarios, los programadores web suelen crear páginas que sean t
olerant
e a fallos según el agent
e de usuario (t
ipo de navegador)
que no admit
a JavaScript
. En part
icular, la página debe seguir siendo út
il aunque sin las caract
eríst
icas adicionales que JavaScript
habría añadido. Un enfoque alt
ernat
ivo que muchos encuent
ran preferible es primero crear cont
enido ut
ilizando las t
ecnologías que funcionan en t
odos los navegadores, y mejorar el cont
enido para los usuarios que han permit
ido JavaScript
.AccesibilidadArt
ículo principal: Accesibilidad web Suponiendo que el usuario no haya desact
ivado la ejecución de código JavaScript
, en el lado del client
e JavaScript
debe ser escrit
o t
ant
o con el propósit
o de mejorar las experiencias de los visit
ant
es con discapacidad visual o física, como el de evit
ar ocult
ar información a est
os visit
ant
es.46Los lect
ores de pant
alla, ut
ilizados por los ciegos y deficient
es visuales, pueden ser t
enidos en cuent
a por JavaScript
y así poder acceder y leer los element
os DOM de la página. El código HTML escrit
o debe ser lo más conciso, navegable y semánt
icament
e rico posible, t
ant
o si JavaScript
se ejecut
a como si no.JavaScript
no debería de ser t
ot
alment
e dependient
e de los event
os de rat
ón del navegador y debería ser accesible para aquellos usuarios que no quieran hacer uso del rat
ón (informát
ica)
para navegar o que opt
en por ut
ilizar solament
e el t
eclado. Hay event
os independient
es del disposit
ivo, t
ales como onfocus y onchange que son preferibles en la mayoría de los casos.46JavaScript
no debe ser ut
ilizado para crear confusión o desorient
ación al usuario web. Por ejemplo, modificar o desact
ivar la funcionalidad normal del navegador, como cambiar la forma en que el bot
ón de navegar hacia at
rás o el event
o de act
ualización se comport
an, son práct
icas que generalment
e son mejores evit
ar. Igualment
e, desencadenar event
os que el usuario puede no t
ener en cuent
a reduce la sensación de cont
rol del usuario y provoca cambios inesperados al cont
enido de la página.47A menudo, el proceso de dot
ar a una página web compleja el mayor grado accesibilidad posible, se conviert
e en un problema no t
rivial donde muchos t
emas se acaban llevando al debat
e y a la opinión, siendo necesario el compromiso de t
odos hast
a el final. Sin embargo, los agent
es de usuario y las t
ecnologías de apoyo a personas con discapacidad est
án en const
ant
e evolución y nuevas direct
rices e información al respect
o siguen publicándose en la web.46SeguridadVéase t
ambién: Seguridad del navegadorJavaScript
y el DOM permit
e que exist
an programadores que hagan un uso inapropiado para int
roducir script
s que ejecut
en código con cont
enido malicioso sin el consent
imient
o del usuario y que pueda así compromet
er su seguridad.Los desarrolladores de los navegadores t
ienen en cuent
a est
e riesgo ut
ilizando dos rest
ricciones. En primer lugar, los script
s se ejecut
an en un sandbox en el que sólo se pueden llevar a cabo acciones relacionadas con la web, no con t
areas de programación de propósit
o general, como la creación de archivos. En segundo lugar, est
á limit
ada por la polít
ica del mismo origen: los script
s de un sit
io web no t
ienen acceso a la información enviada a ot
ro sit
io web (de ot
ro dominio)
como pudiera ser nombres de usuario, cont
raseñas o cook
ies. La mayoría de los fallos de seguridad de JavaScript
est
án relacionados con violaciones de cualquiera de est
as dos rest
ricciones.Exist
en proyect
os como AdSafe o Secure ECMA script
(SES)
que proporcionan mayores niveles de seguridad, en especial en el código creado por t
erceros (t
ales como los anuncios)
.4849La Polít
ica de Cont
enido Seguro (CSP)
es el mét
odo principal previst
o para garant
izar que sólo código de confianza pueda ser ejecut
ado en una página web.Vulnerabilidades cross- sit
eArt
ículos principales: Cross-sit
e script
ing y Cross Sit
e Request
Forgery.Un problema común de seguridad en JavaScript
es el cross-sit
e script
ing o XSS, una violación de la polít
ica de mismo origen. Las vulnerabilidades XSS permit
en a un at
acant
e inyect
ar código JavaScript
en páginas web visit
adas por el usuario. Una de esas webs podría ser la de un banco, pudiendo el at
acant
e acceder a la aplicación de banca con los privilegios de la víct
ima, lo que podría revelar información secret
a o t
ransferir dinero sin la aut
orización de la víct
ima. Una solución para las vulnerabilidades XSS es ut
ilizar HTML escaping cuando se muest
re información de fuent
es no confiablesAlgunos navegadores incluyen una prot
ección parcial cont
ra los at
aques XSS reflejados (el at
acant
e est
á en la misma pet
ición web)
. El at
acant
e proporciona una URL incluyendo código malicioso. Sin embargo, incluso los usuarios de los navegadores son vulnerables a ot
ros at
aques XSS, t
ales como aquellos en los que el código malicioso se almacena en una base de dat
os. Sólo el correct
o diseño de las aplicaciones Web en la part
e servidora puede prevenir t
ot
alment
e XSS. Las vulnerabilidades XSS t
ambién pueden ocurrir debido a errores de ejecución por los desarrolladores del navegador.5
0Ot
ra vulnerabilidad es la falsificación de pet
ición de sit
io cruzado o CSRF. En CSRF, el código del sit
io web at
acant
e engaña al navegador de la víct
ima, permit
iendo al at
acant
e realizar pet
iciones en nombre de la víct
ima, haciendo imposible saber a la aplicación de dest
ino (por ejemplo, la de un banco haciendo una t
ransferencia de dinero)
saber si la pet
ición ha sido realizada volunt
ariament
e por el usuario o por un at
aque CSRF.El at
aque funciona porque, si el sit
io de dest
ino hace uso únicament
e de las cook
ies para aut
ent
icar las solicit
udes de la víct
ima, las pet
iciones iniciadas por el código del at
acant
e t
endrán las mismas credenciales de acceso legít
imo que las solicit
udes iniciadas por el propio usuario.En general, la solución a CSRF consist
e en int
roducir un campo de formulario ocult
o cuyo valor se ut
ilice para realizar la aut
ent
icación, y no sólo por medio de las cook
ies, en solicit
udes que puedan t
ener efect
os duraderos. La comprobación de la cabecera HTTP referer t
ambién puede servir de ayuda."Hijack
ing JavaScript
" es un t
ipo de at
aque CSRF en el que una et
iquet
a <script
> en el sit
io web del at
acant
e explot
a una vulnerabilidad en la página del sit
io de la víct
ima que le hace devolver información privada, en forma de JSON o código JavaScript
. Las posibles soluciones son:que se requiera un t
ok
en de aut
ent
icación en los parámet
ros de las pet
iciones POST y GET para aquellas pet
iciones que requieran devolver información privada del usuario.usar POST y nunca GET para solicit
udes que devuelven información privadaHerramient
as de desarrolloEn JavaScript
, disponer de un depurador se conviert
e en necesario cuando se desarrollan grandes aplicaciones, no t
riviales. Dado que puede haber diferencias de implement
ación ent
re los diferent
es navegadores (especialment
e en cuant
o al DOM)
, es út
il t
ener acceso a un depurador para cada uno de los navegadores a los cuales nuest
ra aplicación web irá dirigido.5
1Los depuradores web est
án disponibles para Int
ernet
Explorer, Firefox, Safari, Google Chrome y Opera.5
2Exist
en t
res depuradores disponibles para Int
ernet
Explorer: Microsoft
Visual St
udio es el más avanzado de los t
res, seguido de cerca por Microsoft
Script
Edit
or (un component
e de Microsoft
Office)
5
3 y, finalment
e, Microsoft
Script
Debugger, que es mucho más básico que el ot
ro dos, aunque es grat
uit
o. El IDE grat
uit
o Microsoft
Visual Web Developer Express ofrece una versión limit
ada de la funcionalidad de depuración de JavaScript
en el Microsoft
Visual St
udio. Int
ernet
Explorer ha incluido herramient
as de desarrollo desde la versión 8 (se muest
ra pulsando la t
ecla F12)
. Las aplicaciones web dent
ro de Firefox se pueden depurar usando el Firebug add-on o el ant
iguo depurador Venk
man. Firefox t
ambién t
iene int
egrada una consola de errores básica, que regist
ra y evalúa JavaScript
. También regist
ra errores de CSS y advert
encias. Opera incluye un conjunt
o de herramient
as llamado Dragonfly.5
4 El Inspect
or Web de WebKit
incluye un depurador de JavaScript
5
5
ut
ilizado en Safari, junt
o con una versión modificada de Google Chrome.Exist
en algunas herramient
as de ayuda a la depuración, t
ambién escrit
as en JavaScript
y const
ruidas para ejecut
arse en la Web. Un ejemplo es el programa JSLint
, desarrollado por Douglas Crock
ford, quien ha escrit
o ext
ensament
e sobre el lenguaje. JSLint
analiza el código JavaScript
para que est
e quede conforme con un conjunt
o de normas y direct
rices y que aseguran su correct
o funcionamient
o y mant
enibilidad.Véase t
ambiénVBScript
AJAX Aplicación webDocument
Object
ModelJSONHTMLReferencias Douglas Crock
ford on Funct
ional JavaScript
(2:49)
: "[JavaScript
] es el lenguaje funcional más popular del mundo. JavaScript
es y siempre ha sido, al menos desde [la versión] 1.2, un lenguaje de programación funcional." RFC 4329 ht
t
p://www.ecma- int
ernat
ional.org/publicat
ions/files/ECMA-ST/ECMA-262.pdf M. Domínguez-Dorado,. Todo Programación. Nº 12. Págs. 48-5
1. Edit
orial Iberprensa(Madrid)
. DL M-13679- 2004. Sept
iembre de 2005
. Bases de dat
os en el client
e con JavaScript
DB. «JavaScript
». Mozilla Developer Net
work
. Consult
ado el 16 de sept
iembre de 2016. Eich, Brendan (13 de agost
o de 2008)
. «ECMAScript
Harmony». Consult
ado el 22 de julio de 2015
. campusMVP (19 de junio de 2015
)
. «ECMAScript
6 es ya un est
ándar cerrado». Consult
ado el 22 de julio de 2015
. Lenguajes de programación usados en Int
ernet
y la World Wide Web (WWW)
(cast
ellano)
.com/05
96101996/jscript
5
-CHP-1 O'Reilly - Safari Book
s Online - 05
96101996 - JavaScript
: The Definit
ive Guide, 5
ª edición (cast
ellano)
ht
t
p://t
sdr.uspt
o.gov/#caseNumber=75
026640&caseType=SERIAL_NO&searchType=st
at
usSear ch Marcas regist
radas de Oracle. «About
JavaScript
» (en inglés)
. Consult
ado el 29 de agost
o de 2013. «JavaScript
is a t
rademark
or regist
ered t
rademark
of Oracle in t
he U.S. and ot
her count
ries». Net
scape Comunicado de prensa (cast
ellano)
«Chapt
er 2: Get
t
ing St
art
ed». Server-Side JavaScript
Guide. Net
scape Communicat
ions Corporat
ion. 1998. Consult
ado el 25
de abril de 2012. Mik
e Morgan (1996)
. «Chapt
er 6: Net
scape Int
ernet
Applicat
ion Framework
». Using Net
scape™ LiveWire™, Special Edit
ion. Que. Archivado desde el original el 27 de noviembre de 2015
. «Server-Side Javascript
: Back
Wit
h a Vengeance». Read Writ
e Web. 17 de diciembre de 2009. Consult
ado el 28 de mayo de 2012. «Node's goal is t
o provide an easy way t
o build scalable net
work
programs». About
Node.js. Joyent
. «JavaScript
: The World's Most
Misunderst
ood Programming Language». Crock
ford.com. Consult
ado el 19 de mayo de 2009. Kris Kowal (1 de diciembre de 2009)
. «CommonJS effort
set
s JavaScript
on pat
h for world dominat
ion». Ars Technica. Condé Nast
Publicat
ions. Consult
ado el 18 de abril de 2010. ECMA Int
ernat
ional (Junio de 2015
)
. «St
andard ECMA-262 6t
h Edit
ion». campusMVP (19 de junio de 2015
)
. «ECMAScript
6 ya es un est
ándar cerrado». Consult
ado el 22 de julio de 2015
. «Tabla de compat
ibilidad de navegadores con ECMAScript
6 (Inglés)
». ECMA Int
ernat
ional (Junio de 2016)
. «St
andard ECMA-262 7t
h Edit
ion». ECMA Int
ernat
ional (Junio de 2016)
. «ECMAScript
2016 Language Specificat
ion». Flanagan, 2006, p. 16. Flanagan, 2006, pp. 176–178. Propert
ies of t
he Funct
ion Object
Flanagan, 2006, p. 141. «Inherit
ance and t
he prot
ot
ype chain». Mozilla Developer Net
work
. Mozilla. Consult
ado el 6 de abril de 2013. Herman, David (2013)
. Effect
ive Javascript
. Addison-Wesley. p. 83. ISBN 9780321812186. Haverbek
e, Marjin (2011)
. Eloquent
Javascript
. No St
arch Press. pp. 95
-97. ISBN 97815
93272821. Kat
z, Yehuda. «Underst
anding "Prot
ot
ypes" in JavaScript
». Consult
ado el 6 de abril de 2013. Herman, David (2013)
. Effect
ive Javascript
. Addison-Wesley. pp. 125
-127. ISBN 9780321812186. Haverbek
e, Marijn (2011)
. Eloquent
JavaScript
. No St
arch Press. pp. 139-149. ISBN 978-15
93272821. Robert
Nyman, Get
t
ers And Set
t
ers Wit
h JavaScript
– Code Samples And Demos, published 29 May 2009, accessed 2 January 2010. John Resig, JavaScript
Get
t
ers and Set
t
ers, 18 July 2007, accessed 2 January 2010 ht
t
p://www.ecma-int
ernat
ional.org/publicat
ions/st
andards/Ecma-262.ht
m. «var - JavaScript
- MDN». The Mozilla Developer Net
work
. Consult
ado el 22 de diciembre de 2012. «ECMAScript
Language Specificat
ion - ECMA-262 Edit
ion 5
.1». Ecma Int
ernat
ional. Consult
ado el 22 de diciembre de 2012. «console». Mozilla Developer Net
work
. Mozilla. Consult
ado el 6 de abril de 2013. «JavaScript
t
rack
ing - Piwik
». Piwik
. Consult
ado el 31 de marzo de 2012. Hamilt
on, Naomi (31 de junio de 2008)
. «The A-Z of Programming Languages: JavaScript
». comput
erworld.com.au. Pet
er-Paul Koch, Object
det
ect
ion Pet
er-Paul Koch, Mission Impossible - mouse posit
ion Pet
er- Paul Koch, Browser det
ect
Flanagan, 2006, pp. 262–263. «Creat
ing Accessible JavaScript
». WebAIM. Consult
ado el 8 de junio de 2010. ADsafe - Mak
ing JavaScript
Safe for Advert
ising Secure ECMA Script
(SES)
MozillaZine, Mozilla Cross-Sit
e Script
ing Vulnerabilit
y Report
ed and Fixed «Advanced Debugging Wit
h JavaScript
». alist
apart
.com. 3 de febrero de 2009. Consult
ado el 28 de mayo de 2010. «The JavaScript
Debugging Console». javascript
.about
.com. 28 de mayo de 2010. Consult
ado el 28 de mayo de 2010. JScript
development
in Microsoft
Office 11 (MS InfoPat
h 2003)
«Opera DragonFly». Opera Soft
ware. «Int
roducing Drosera - Surfin' Safari». Webk
it
.org. 28 de junio de 2006. Consult
ado el 19 de mayo de 2009.BibliografíaFlanagan, David; Ferguson, Paula (2002)
. JavaScript
: The Definit
ive Guide (4.ª edición)
. ISBN 0-5
96-00048-0.Enlaces ext
ernosMozilla Developer Cent
erslice( )
- O'Reilly Answers (en inglés)
Dist
inción ent
re variables locales y globalesJavascript
t
ut
orialCat
egorías: Lenguajes de programaciónLenguajes int
erpret
adosJavaScript
Lenguajes de programación orient
ada a objet
osLenguajes de programación basados en prot
ot
iposSoft
ware de 1995
Net
scapeMenú de navegaciónNo has accedidoDiscusiónCont
ribucionesCrear una cuent
aAccederArt
ículoDiscusiónLeerEdit
arVer hist
orialBuscarBuscar en Wik
ipedia Port
adaPort
al de la comunidadAct
ualidadCambios recient
esPáginas nuevasPágina aleat
oriaAyudaDonacionesNot
ificar un errorImprimir/export
arCrear un libroDescargar como PDFVersión para imprimirEn ot
ros proyect
osWik
imedia CommonsWik
ilibros Wik
iversidadHerramient
asLo que enlaza aquíCambios en enlazadasSubir archivoPáginas especialesEnlace permanent
eInformación de la páginaElement
o de Wik
idat
aCit
ar est
a páginaEn ot
ros idiomasDeut
schEnglishFrançaisIt
aliano한국어РусскийTagalogTiếng Việt
中 文80 másEdit
ar enlacesEst
a página se edit
ó por últ
ima vez el 10 ago 2018 a las 22:31.El t
ext
o est
á disponible bajo la Licencia Creat
ive Commons At
ribución Compart
ir Igual 3.0; pueden aplicarse cláusulas adicionales. Al usar est
e sit
io, ust
ed acept
a nuest
ros t
érminos de uso y nuest
ra polít
ica de privacidad. Wik
ipedia® es una marca regist
rada de la Fundación Wik
imedia, Inc., una organización sin ánimo de lucro.Polít
ica de privacidadAcerca de Wik
ipediaLimit
ación de responsabilidadDesarrolladoresDeclaración de cook
iesVersión para móvilesWik
imedia Foundat
ion Powered by MediaWik
i