Professional Documents
Culture Documents
JavaScript
Informacin general
Paradigma
Multi-paradigma,Programacin
funcional,1Programacin basada en
prototipos, imperativo,Interpretado (Scripting) .
Apareci en
1995
Diseado por
ltima versin
estable
Tipo de dato
hakra.
Dialectos
ECMAScript
Influido por
Ha influido a
JavaScript
Informacin general
Extensin de
.js
archivo
Tipo de MIME
application/javascript,
text/javascript2
Tipo de
scripting
formato
Formato
abierto
1Historia
1.1Nacimiento de JavaScript
1.3Desarrollos posteriores
2Caractersticas
o
2.1Imperativo y estructurado
2.2Dinmico
2.3Funcional
2.4Prototpico
2.5Otras caractersticas
3Sintaxis y semntica
o
3.1Ejemplos sencillos
3.2Ejemplos ms avanzados
4.1Ejemplo de script
4.3Accesibilidad
5Seguridad
o
5.1Vulnerabilidades cross-site
6Herramientas de desarrollo
7Vase tambin
8Referencias
9Bibliografa
10Enlaces externos
Historia[editar]
Nacimiento de JavaScript[editar]
JavaScript fue desarrollado originalmente por Brendan Eich de Netscape con el nombre
de Mocha, el cual fue renombrado posteriormente a LiveScript, para finalmente quedar como
JavaScript. El cambio de nombre coincidi aproximadamente con el momento en que
Netscape agreg compatibilidad con la tecnologa Java en su navegador web Netscape
Navigator en la versin 2.002 en diciembre de 1995. La denominacin produjo confusin,
dando la impresin de que el lenguaje es una prolongacin de Java, y se ha caracterizado por
muchos como una estrategia de mercadotecnia de Netscape para obtener prestigio e innovar
en lo que eran los nuevos lenguajes de programacin web.7 8
JAVASCRIPT es una marca registrada de Oracle Corporation.9 Es usada con licencia por
los productos creados por Netscape Communications y entidades actuales como la Fundacin
Mozilla.10 11
Microsoft dio como nombre a su dialecto de JavaScript JScript, para evitar problemas
relacionadas con la marca. JScript fue adoptado en la versin 3.0 de Internet Explorer,
liberado en agosto de 1996, e incluy compatibilidad con el Efecto 2000 con las funciones de
fecha, una diferencia de los que se basaban en ese momento. Los dialectos pueden parecer
tan similares que los trminos JavaScript y JScript a menudo se utilizan indistintamente,
pero la especificacin de JScript es incompatible con la de ECMA en muchos aspectos.
Para evitar estas incompatibilidades, el World Wide Web Consortium dise el
estndar Document Object Model (DOM, o Modelo de Objetos del Documento en espaol),
que incorporanKonqueror, las versiones 6 de Internet Explorer y Netscape Navigator, Opera la
versin 7, Mozilla Application Suite y Mozilla Firefox desde su primera versin.[cita requerida]
En 1997 los autores propusieron12 JavaScript para que fuera adoptado como estndar de la
European Computer Manufacturers 'Association ECMA, que a pesar de su nombre no es
europeo sino internacional, con sede en Ginebra. En junio de 1997 fue adoptado como un
estndar ECMA, con el nombre de ECMAScript. Poco despus tambin como un
estndar ISO.
Desarrollos posteriores[editar]
JavaScript se ha convertido en uno de los lenguajes de programacin ms populares en
internet. Al principio, sin embargo, muchos desarrolladores renegaban del lenguaje porque el
pblico al que va dirigido lo formaban publicadores de artculos y dems aficionados, entre
otras razones.17 La llegada de Ajax devolvi JavaScript a la fama y atrajo la atencin de
muchos otros programadores. Como resultado de esto hubo una proliferacin de un conjunto
de frameworks y libreras de mbito general, mejorando las prcticas de programacin con
JavaScript, y aumentado el uso de JavaScript fuera de los navegadores web, como se ha visto
con la proliferacin de entornos JavaScript del lado del servidor. En enero de 2009, el
proyectoCommonJS fue inaugurado con el objetivo de especificar una librera para uso de
tareas comunes principalmente para el desarrollo fuera del navegador web. 18
En junio de 2015 se cerr y public el estndar ECMAScript 619 20 (ltima versin hasta la
fecha) con un soporte irregular entre navegadores21 y que dota a JavaScript de caractersticas
avanzadas que se echaban de menos y que son de uso habitual en otros lenguajes como, por
ejemplo, mdulos para organizacin del cdigo, verdaderas clases para programacin
orientada a objetos, expresiones de flecha, iteradores, generadores o promesas para
programacin asncrona.
Caractersticas[editar]
Las siguientes caractersticas son comunes a todas las implementaciones que se ajustan al
estndar ECMAScript, a menos que especifique explcitamente en caso contrario.
Imperativo y estructurado[editar]
JavaScript es compatible con gran parte de la estructura de programacin de C (por ejemplo,
sentencias if , bucles for , sentencias switch , etc.). Con una salvedad, en parte: en C,
elmbito de las variables alcanza al bloque en el cual fueron definidas; sin embargo JavaScript
no es compatible con esto, puesto que el mbito de las variables es el de la funcin en la cual
fueron declaradas. Esto cambia con la versin de JavaScript 1.7, ya que aade compatibilidad
con block scoping por medio de la palabra clave let . 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 JavaScript los puntos y coma que finalizan una
sentencia pueden ser omitidos.22
Dinmico[editar]
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 dado puede estar ligada a un
nmero y ms adelante, religada a una cadena. JavaScript es compatible con varias
formas de comprobar el tipo de un objeto, incluyendo duck typing.23 Una forma de
saberlo es por medio de la palabra clave typeof.
Objetual
JavaScript est formado casi en su totalidad por objetos. Los objetos en JavaScript
son arrays 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 predefinidos como son Function y Date .
Evaluacin en tiempo de ejecucin
JavaScript incluye la funcin eval que permite evaluar expresiones como expresadas
como cadenas en tiempo de ejecucin. Por ello se recomienda que eval sea utilizado
con precaucin y que se opte por utilizar la funcin JSON.parse() en la medida de lo
posible, pues resulta mucho ms segura.
Funcional[editar]
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 mtodos, como .call() y .bind() .24 Una
funcin anidada es una funcin definida dentro de otra. Esta es creada cada vez que la
funcin externa es invocada. Adems, cada funcin creada forma una clausura; es el
resultado de evaluar un mbito conteniendo en una o ms variables dependientes de
otro mbito externo, incluyendo constantes, variables locales y argumentos de la
funcin externa llamante. El resultado de la evaluacin de dicha clausura forma parte
del estado interno de cada objeto funcin, incluso despus de que la funcin exterior
concluya su evaluacin.25
Prototpico[editar]
Prototipos
JavaScript usa prototipos en vez de clases para el uso de herencia.26 Es posible llegar
a emular muchas de las caractersticas que proporcionan las clases en lenguajes
orientados a objetos tradicionales por medio de prototipos en JavaScript. 27
Funciones como constructores de objetos
Las funciones tambin se comportan como constructores. Prefijar una llamada a la
funcin con la palabra clave new crear una nueva instancia de un prototipo, que
heredan propiedades y mtodos del constructor (incluidas las propiedades del
prototipo de Object ).28 ECMAScript 5 ofrece el mtodo Object.create ,
permitiendo la creacin explcita de una instancia sin tener que heredar
automticamente del prototipo de Object (en entornos antiguos puede aparecer el
prototipo del objeto creado como null ).29 La propiedad prototype del constructor
determina el objeto usado para el prototipo interno de los nuevos objetos creados. Se
pueden aadir nuevos mtodos modificando el prototipo del objeto usado como
constructor. Constructores predefinidos en JavaScript, como Array u Object ,
tambin tienen prototipos que pueden ser modificados. Aunque esto sea posible se
considera una mala prctica modificar el prototipo de Object ya que la mayora de los
objetos en Javascript heredan los mtodos y propiedades del objeto prototype, objetos
los cuales pueden esperar que estos no hayan sido modificados.30
Otras caractersticas[editar]
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 indefinido 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 . Lasfunciones varidicas tambin pueden ser creadas usando el
mtodo .apply() .
Funciones como mtodos
A diferencia de muchos lenguajes orientados a objetos, no hay distincin entre la
definicin de funcin y la definicin 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 que invoc dicha funcin.
Arrays y la definicin literal de objetos
Al igual que muchos lenguajes de script, arrays y objetos (arrays asociativos en otros
idiomas) pueden ser creados con una sintaxis abreviada. De hecho, estos literales
forman 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 sofisticado que las funciones incorporadas a los objetos de tipo
string.31
Sintaxis y semntica[editar]
Artculo principal: Sintaxis de JavaScript
Ejemplos sencillos[editar]
Las variables en JavaScript se definen usando la
palabra clave var:35
var x; // define la variable x, aunque
no tiene ningn valor asignado por
defecto
var y = 2; // define la variable y y
le asigna el valor 2 a ella
Ejemplos ms avanzados[editar]
El siguiente cdigo muestra varias caractersticas
de JavaScript.
/* Busca el mnimo comn mltiplo
(MCM) de dos nmeros */
function LCMCalculator(x, y) { //
funcin constructora
var checkInt = function (x) { //
funcin interior
if (x % 1 !== 0) {
throw new TypeError(x + "
no es un entero"); // lanza una
excepcin
}
return x;
};
this.a = checkInt(x) // puntos y
coma son opcionales
this.b = checkInt(y);
}
// El prototipo de las instancias de
objeto creados por el constructor es
el de la propiedad prototype del
constructor.
LCMCalculator.prototype = { // objeto
definido como literal
constructor: LCMCalculator, //
cuando reasignamos un prototipo,
establecemos correctamente su
propiedad constructor
gcd: function () { // mtodo que
calcula el mximo comn divisor
// Algoritmo de Euclides:
var a = Math.abs(this.a), b =
Math.abs(this.b), t;
if (a < b) {
// intercambiamos
variables
t = b;
b = a;
a = t;
}
while (b !== 0) {
t = b;
b = a % b;
a = t;
}
// Solo necesitamos calcular
el MCD una vez, por lo tanto
'redefinimos' este mtodo.
// (Realmente no es una
redefinicinest definida en la
propia instancia, por lo tanto
Ejemplo de script[editar]
A continuacin se muestra un breve ejemplo de
una pgina web (ajustadose a las normas del
Consideraciones acerca de la
compatibilidad[editar]
Artculo principal: Interoperabilidad web
Accesibilidad[editar]
Artculo principal: Accesibilidad web
Seguridad[editar]
Vase tambin: Seguridad del navegador
Vulnerabilidades cross-site[editar]
Artculos principales: Cross-site scripting y Cross
Herramientas de
desarrollo[editar]
En JavaScript, disponer de un depurador se
convierte en necesario cuando se desarrollan
grandes aplicaciones, no triviales. Dado que
puede haber diferencias de implementacin entre
los diferentes navegadores (especialmente en
cuanto al DOM), es til tener acceso a un
depurador para cada uno de los navegadores a
los cuales nuestra aplicacin web ir dirigido.48
Los depuradores web estn disponibles para
Internet Explorer, Firefox, Safari, Google Chrome
y Opera.49
Existen tres depuradores disponibles
para Internet Explorer: Microsoft Visual Studio es
el ms avanzado de los tres, seguido de cerca
por Microsoft Script Editor (un componente
deMicrosoft Office)50 y, finalmente, Microsoft
Script Debugger, que es mucho ms bsico que
el otro dos, aunque es gratuito. El IDE gratuito
Microsoft Visual Web Developer Express ofrece
una versin limitada de la funcionalidad de
depuracin de JavaScript en el Microsoft Visual
Studio. Internet Explorer ha incluido herramientas
de desarrollo desde la versin 8 (se muestra
pulsando la tecla F12). Las aplicaciones web
dentro de Firefox se pueden depurar usando
el Firebug add-on o el antiguo depurador
Venkman. Firefox tambin tiene integrada una
consola de errores bsica, que registra y evala
JavaScript. Tambin registra errores de CSS y
advertencias. Opera incluye un conjunto de
herramientas llamado Dragonfly.51 El Inspector
Web deWebKit incluye un depurador de
JavaScript52 utilizado en Safari, junto con una
versin modificada de Google Chrome.
Existen algunas herramientas de ayuda a la
depuracin, tambin escritas en JavaScript y
construidas para ejecutarse en la Web. Un
ejemplo es el programa JSLint, desarrollado
porDouglas Crockford, quien ha escrito
extensamente sobre el lenguaje. JSLint analiza
el cdigo JavaScript para que este quede
conforme con un conjunto de normas y