Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
mercadotecnia de Netscape para obtener prestigio e innovar en lo que eran los nuevos lenguajes de programacin
web.[5][6]
JavaScript se dise con una sintaxis similar al C, aunque adopta nombres y convenciones del lenguaje de programacin Java. Sin embargo Java y JavaScript no estn
relacionados y tienen semnticas y propsitos diferentes.
JAVASCRIPT es una marca registrada de Oracle Corporation.[7] Es usada con licencia por los productos creaSe utiliza principalmente en su forma del lado del cliente dos por Netscape Communications y entidades actuales
(client-side), implementado como parte de un navegador como la Fundacin Mozilla.[8][9]
web permitiendo mejoras en la interfaz de usuario y Microsoft dio como nombre a su dialecto de JavaScript
pginas web dinmicas[4] aunque existe una forma de Ja- JScript, para evitar problemas relacionadas con la marvaScript del lado del servidor (Server-side JavaScript o ca. JScript fue adoptado en la versin 3.0 de Internet ExSSJS). Su uso en aplicaciones externas a la web, por ejem- plorer, liberado en agosto de 1996, e incluy compatibiplo en documentos PDF, aplicaciones de escritorio (ma- lidad con el Efecto 2000 con las funciones de fecha, una
yoritariamente widgets) es tambin signicativo.
diferencia de los que se basaban en ese momento. Los
1
1.1
Historia
Nacimiento de JavaScript
Netscape introdujo una implementacin de script del lado del servidor con Netscape Enterprise Server, lanzada
en diciembre de 1994 (poco despus del lanzamiento de
JavaScript para navegadores web).[11][12] A partir de mediados de la dcada de los 2000, ha habido una proliferacin de implementaciones de JavaScript para el lado servidor. Node.js es uno de los notables ejemplos de JavaScript en el lado del servidor, siendo usado en proyectos
importantes.[13][14]
1
1.3
Desarrollos posteriores
CARACTERSTICAS
asociativos, mejorados con la inclusin de prototipos (ver ms adelante). Los nombres de las propiedades de los objetos son claves de tipo cadena: obj.x
= 10 y obj['x'] = 10 son equivalentes, siendo la notacin con punto azcar sintctico. Las propiedades y
sus valores pueden ser creados, cambiados o eliminados en tiempo de ejecucin. La mayora de propiedades de un objeto (y aquellas que son incluidas
por la cadena de la herencia prototpica) pueden ser
enumeradas a por medio de la instruccin de bucle
for... in. JavaScript tiene un pequeo nmero de objetos predenidos como son Function y Date.
Caractersticas
Las siguientes caractersticas son comunes a todas las im- 2.3 Funcional
plementaciones que se ajustan al estndar ECMAScript, a
menos que especique explcitamente en caso contrario. Funciones de primera clase A las funciones se les suele llamar ciudadanos de primera clase; son objetos
en s mismos. Como tal, poseen propiedades y mto2.1 Imperativo y estructurado
dos, como .call() y .bind().[19] Una funcin anidada
es una funcin denida dentro de otra. Esta es creaJavaScript es compatible con gran parte de la estructura
da cada vez que la funcin externa es invocada. Adede programacin de C (por ejemplo, sentencias if, bucles
ms, cada funcin creada forma una clausura; es el
for, sentencias switch, etc.). Con una salvedad, en parte:
resultado de evaluar un mbito conteniendo en una o
en C, el mbito de las variables alcanza al bloque en el
ms variables dependientes de otro mbito externo,
cual fueron denidas; sin embargo JavaScript no es comincluyendo constantes, variables locales y argumenpatible con esto, puesto que el mbito de las variables es
tos de la funcin externa llamante. El resultado de la
el de la funcin en la cual fueron declaradas. Esto cambia
evaluacin de dicha clausura forma parte del estado
con la versin de JavaScript 1.7, ya que aade compatibiinterno de cada objeto funcin, incluso despus de
lidad con block scoping por medio de la palabra clave let.
que la funcin exterior concluya su evaluacin.[20]
Como en C, JavaScript hace distincin entre expresiones
y sentencias. Una diferencia sintctica con respecto a C
es la insercin automtica de punto y coma, es decir, en
2.4 Prototpico
JavaScript los puntos y coma que nalizan una sentencia
pueden ser omitidos.[17]
Prototipos JavaScript usa prototipos en vez de clases
para el uso de herencia.[21] Es posible llegar a emular
muchas de las caractersticas que proporcionan las
2.2 Dinmico
clases en lenguajes orientados a objetos tradicionales por medio de prototipos en JavaScript.[22]
Tipado dinmico Como en la mayora de lenguajes de
scripting, el tipo est asociado al valor, no a la variable. Por ejemplo, una variable x en un momento Funciones como constructores de objetos Las funciodado puede estar ligada a un nmero y ms adelante,
nes tambin se comportan como constructores. Prereligada a una cadena. JavaScript es compatible con
jar una llamada a la funcin con la palabra clave
varias formas de comprobar el tipo de un objeto, innew crear una nueva instancia de un prototipo, que
cluyendo duck typing.[18] Una forma de saberlo es
heredan propiedades y mtodos del constructor (inpor medio de la palabra clave typeof.
cluidas las propiedades del prototipo de Object).[23]
Objetual JavaScript est formado casi en su totalidad
por objetos. Los objetos en JavaScript son arrays
ECMAScript 5 ofrece el mtodo Object.create, permitiendo la creacin explcita de una instancia sin
tener que heredar automticamente del prototipo de
2.6
2.5
Otras caractersticas
Entorno de ejecucin JavaScript normalmente depende del entorno en el que se ejecute (por ejemplo,
en un navegador web) para ofrecer objetos y mtodos por los que los scripts pueden interactuar con
el mundo exterior. De hecho, depende del entorno
para ser capaz de proporcionar la capacidad de incluir o importar scripts (por ejemplo, en HTML por
medio del tag <script>). (Esto no es una caracterstica del lenguaje, pero es comn en la mayora de
las implementaciones de JavaScript.)
Funciones varidicas Un nmero indenido de parmetros pueden ser pasados a la funcin. La funcin puede acceder a ellos a travs de los parmetros o tambin a travs del objeto local arguments.
Las funciones varidicas tambin pueden ser creadas usando el mtodo .apply().
3 Sintaxis y semntica
A partir del 2011, la ltima versin del lenguaje es JavaScript 1.8.5. Es un superconjunto de la especicacin
ECMAScript (ECMA-262) Edicin 3. Extensiones del
lenguaje, que incluyen compatibilidad parcial con ECMAScript para XML (E4X) (ECMA-357) y caractersticas experimentales consideradas para ser incluidas en futuras ediciones del ECMAScript, documentadas aqu.[29]
Funciones como mtodos A diferencia de muchos lenguajes orientados a objetos, no hay distincin entre
la denicin de funcin y la denicin de mtodo.
Ms bien, la distincin se produce durante la llamada a la funcin; una funcin puede ser llamada como
un mtodo. Cuando una funcin es llamada como un
mtodo de un objeto, la palabra clave this, que es
una variable local a la funcin, representa al objeto 3.1 Ejemplos sencillos
que invoc dicha funcin.
Las variables en JavaScript se denen usando la palabra
Arrays y la denicin literal de objetos Al igual que clave var:[30]
muchos lenguajes de script, arrays y objetos (arrays var x; // dene la variable x, aunque no tiene ningn valor
asociativos en otros idiomas) pueden ser creados con asignado por defecto var y = 2; // dene la variable y y le
una sintaxis abreviada. De hecho, estos literales for- asigna el valor 2 a ella
man la base del formato de datos JSON.
Expresiones regulares JavaScript tambin es compatible con expresiones regulares de una manera similar a Perl, que proporcionan una sintaxis concisa y
poderosa para la manipulacin de texto que es ms
sosticado que las funciones incorporadas a los objetos de tipo string.[26]
Sin embargo, la mayora de los entornos de ejecucin tiene un objeto[32] llamado console que puede ser usado para
imprimir por el ujo de salida de la consola de depuracin. He aqu un simple programa que imprime Hello
world!:
console.log(Hello world!");
Una funcin recursiva:
function factorial(n) { if (n === 0) { return 1; } return n
* factorial(n - 1); }
Ejemplos de funcin annima (o funcin lambda) y una
clausura:
var displayClosure = function() { var count = 0; return
function () { return ++count; }; } var inc = displayClosure(); inc(); // devuelve 1 inc(); // devuelve 2 inc(); //
devuelve 3
Las expresiones con invocacin automtica permiten a las
funciones pasarle variables por parmetro dentro de sus
propias clausuras.
var v; v = 1; var getValue = (function(v) { return El siguiente ejemplo muestra la salida que debera ser
function() {return v;}; }(v)); v = 2; getValue(); // 1
mostrada en la ventana de un navegador.
3.2
Ejemplos ms avanzados
4.1
Ejemplo de script
5 SEGURIDAD
tener la ejecucin de JavaScript deshabilitada, como
precaucin de seguridad,
5 Seguridad
utilizar un navegador de voz debido a, por ejemplo, JavaScript y el DOM permite que existan programadores que hagan un uso inapropiado para introducir scripts
una discapacidad visual.
que ejecuten cdigo con contenido malicioso sin el consentimiento del usuario y que pueda as comprometer su
Para apoyar a estos usuarios, los programadores web sue- seguridad.
len crear pginas que sean tolerante a fallos segn el agente de usuario (tipo de navegador) que no admita JavaS- Los desarrolladores de los navegadores tienen en cuenta
cript. En particular, la pgina debe seguir siendo til aun- este riesgo utilizando dos restricciones. En primer lugar,
que sin las caractersticas adicionales que JavaScript ha- los scripts se ejecutan en un sandbox en el que slo se
bra aadido. Un enfoque alternativo que muchos encuen- pueden llevar a cabo acciones relacionadas con la web, no
tran preferible es primero crear contenido utilizando las con tareas de programacin de propsito general, como la
tecnologas que funcionan en todos los navegadores, y creacin de archivos. En segundo lugar, est limitada por
mejorar el contenido para los usuarios que han permitido la poltica del mismo origen: los scripts de un sitio web
no tienen acceso a la informacin enviada a otro sitio web
JavaScript.
(de otro dominio) como pudiera ser nombres de usuario,
contraseas o cookies. La mayora de los fallos de seguridad de JavaScript estn relacionados con violaciones de
4.3 Accesibilidad
cualquiera de estas dos restricciones.
Suponiendo que el usuario no haya desactivado la ejecu- Existen proyectos como AdSafe o Secure ECMA script
cin de cdigo JavaScript, en el lado del cliente JavaS- (SES) que proporcionan mayores niveles de seguridad, en
cript debe ser escrito tanto con el propsito de mejorar especial en el cdigo creado por terceros (tales como los
las experiencias de los visitantes con discapacidad visual anuncios).[40][41]
o fsica, como el de evitar ocultar informacin a estos
La Poltica de Contenido Seguro (CSP) es el mtodo
visitantes.[38]
principal previsto para garantizar que slo cdigo de conLos lectores de pantalla, utilizados por los ciegos y de- anza pueda ser ejecutado en una pgina web.
cientes visuales, pueden ser tenidos en cuenta por JavaScript y as poder acceder y leer los elementos DOM de
la pgina. El cdigo HTML escrito debe ser lo ms con- 5.1 Vulnerabilidades cross-site
ciso, navegable y semnticamente rico posible, tanto si
JavaScript se ejecuta como si no.
Un problema comn de seguridad en JavaScript es el
JavaScript no debera de ser totalmente dependiente de
los eventos de ratn del navegador y debera ser accesible para aquellos usuarios que no quieran hacer uso del
ratn (informtica) para navegar o que opten por utilizar solamente el teclado. Hay eventos independientes del
dispositivo, tales como onfocus y onchange que son preferibles en la mayora de los casos.[38]
Otra vulnerabilidad es la falsicacin de peticin de sitio cruzado o CSRF. En CSRF, el cdigo del sitio web
atacante engaa al navegador de la vctima, permitiendo
al atacante realizar peticiones en nombre de la vctima,
7
haciendo imposible saber a la aplicacin de destino (por
ejemplo, la de un banco haciendo una transferencia de
dinero) saber si la peticin ha sido realizada voluntariamente por el usuario o por un ataque CSRF.
cias. Opera incluye un conjunto de herramientas llamado Dragony.[46] El Inspector Web de WebKit incluye un
depurador de JavaScript[47] utilizado en Safari, junto con
una versin modicada de Google Chrome.
[1] Douglas Crockford on Functional JavaScript (2:49): "[JavaScript] es el lenguaje funcional ms popular del mundo.
JavaScript es y siempre ha sido, al menos desde [la versin] 1.2, un lenguaje de programacin funcional.
[2] RFC 4329
que se requiera un token de autenticacin en los parmetros de las peticiones POST y GET para aquellas peticiones que requieran devolver informacin
privada del usuario.
usar POST y nunca GET para solicitudes que devuelven informacin privada
Herramientas de desarrollo
[3] http://www.ecma-international.org/publications/files/
ECMA-ST/ECMA-262.pdf
[4] M. Domnguez-Dorado,. Todo Programacin. N 12.
Pgs. 48-51. Editorial Iberprensa(Madrid). DL M-136792004. Septiembre de 2005. Bases de datos en el cliente con
JavaScript DB.
[5] Lenguajes de programacin usados en Internet y la World
Wide Web (WWW) (castellano)
[6] .com/0596101996/jscript5-CHP-1 O'Reilly - Safari
Books Online - 0596101996 - JavaScript: The Denitive
Guide, 5 edicin (castellano)
[7] http://tsdr.uspto.gov/#caseNumber=75026640&
caseType=SERIAL_NO&searchType=statusSearch
[8] Marcas registradas de Oracle.
[9] About JavaScript (en ingls). Consultado el 29 de agosto de 2013. JavaScript is a trademark or registered trademark of Oracle in the U.S. and other countries.
[10] Netscape Comunicado de prensa (castellano)
[11] Chapter 2: Getting Started. Server-Side JavaScript Guide. Netscape Communications Corporation. 1998. Consultado el 25 de abril de 2012.
[12] Mike Morgan (1996). Chapter 6: Netscape Internet
Application Framework. Using Netscape LiveWire,
Special Edition. Que.
[13] Server-Side Javascript: Back With a Vengeance. Read
Write Web. 17 de diciembre de 2009. Consultado el 28 de
mayo de 2012.
[14] Nodes goal is to provide an easy way to build scalable
network programs. About Node.js. Joyent.
[15] JavaScript: The Worlds Most Misunderstood Programming Language. Crockford.com. Consultado el 19 de
mayo de 2009.
[16] Kris Kowal (1 de diciembre de 2009). CommonJS eort
sets JavaScript on path for world domination. Ars Technica. Cond Nast Publications. Consultado el 18 de abril
de 2010.
[17] Flanagan, 2006, p. 16.
[18] Flanagan, 2006, pp. 176178.
10 ENLACES EXTERNOS
[22] Herman, David (2013). Eective Javascript. AddisonWesley. p. 83. ISBN 9780321812186.
8 Vase tambin
VBScript
AJAX
Aplicacin web
Document Object Model
JSON
HTML
9 Bibliografa
Flanagan, David; Ferguson, Paula (2002). JavaScript: The Denitive Guide (4. edicin). ISBN 0-59600048-0.
10 Enlaces externos
Mozilla Developer Center
slice( ) - O'Reilly Answers (en ingls)
Distincin entre variables locales y globales
11
11.1
11.2
Images
11.3
Content license