You are on page 1of 14

9/9/2016

JavaScript - Wikipedia, la enciclopedia libre

JavaScript
DeWikipedia,laenciclopedialibre
JavaScript (abreviado comnmente JS) es un lenguaje de
programacin interpretado, dialecto del estndar
ECMAScript.Sedefinecomoorientadoaobjetos,3basadoen
prototipos,imperativo,dbilmentetipadoydinmico.
Se utiliza principalmente en su forma del lado del cliente
(clientside),implementadocomopartedeunnavegadorweb
permitiendomejorasenlainterfazdeusuarioypginasweb
dinmicas4 aunque existe una forma de JavaScript del lado
del servidor (Serverside JavaScript o SSJS). Su uso en
aplicaciones externas a la web, por ejemplo en documentos
PDF, aplicaciones de escritorio (mayoritariamente widgets)
estambinsignificativo.
JavaScript se dise con una sintaxis similar a C, aunque
adopta nombres y convenciones del lenguaje de
programacin Java. Sin embargo, Java y JavaScript tienen
semnticasypropsitosdiferentes.

JavaScript
Informacingeneral
Paradigma

Multiparadigma,Programacin
funcional,1Programacinbasada
enprototipos,imperativo,
Interpretado(Scripting).

Aparecien

1995

Diseadopor

NetscapeCommunicationsCorp,
MozillaFundation

ltimaversin
estable

1.8.5(22demarzode2011(5aos,5

Tipodedato

Dbil,dinmico,duck

mesesy18das))

Implementaciones SpiderMonkey,Rhino,KJS,
JavaScriptCore,V8,Chakra.

Todos los navegadores modernos interpretan el cdigo


JavaScriptintegradoenlaspginasweb.Parainteractuarcon
una pgina web se provee al lenguaje JavaScript de una
implementacindelDocumentObjectModel(DOM).

Dialectos

ECMAScript

Influidopor

Java,Perl,Self,Python,C,Scheme

Hainfluidoa

ObjectiveJ,JScript,JScript.NET,
TIScript

TradicionalmentesevenautilizandoenpginaswebHTML
para realizar operaciones y nicamente en el marco de la
aplicacin cliente, sin acceso a funciones del servidor.
Actualmente es ampliamente utilizado para enviar y recibir
informacindelservidorjuntoconayudadeotrastecnologas
comoAJAX.JavaScriptseinterpretaenelagentedeusuario
almismotiempoquelassentenciasvandescargndosejunto
conelcdigoHTML.

[editardatosenWikidata]

Desde el lanzamiento en junio de 1997 del estndar


ECMAScript1,hanexistidolasversiones2,3y5,queesla
ms usada actualmente (la 4 se abandon5 ). En junio de
2015secerrypubliclaversinECMAScript66.

TipodeMIME application/javascript,

ndice

JavaScript
Informacingeneral
Extensinde
archivo

.js

text/javascript2

Tipode
formato

scripting

Formato
abierto

[editardatosenWikidata]

1 Historia
1.1 NacimientodeJavaScript
1.2 JavaScriptenelladoservidor
1.3 Desarrollosposteriores
2 Caractersticas
2.1 Imperativoyestructurado
2.2 Dinmico
https://es.wikipedia.org/wiki/JavaScript

1/14

9/9/2016

JavaScript - Wikipedia, la enciclopedia libre

2.2 Dinmico
2.3 Funcional
2.4 Prototpico
2.5 Otrascaractersticas
2.6 Extensionesespecficasdelfabricante
3 Sintaxisysemntica
3.1 Ejemplossencillos
3.2 Ejemplosmsavanzados
4 Usoenpginasweb
4.1 Ejemplodescript
4.2 Consideraciones
acerca
de
compatibilidad
4.3 Accesibilidad
5 Seguridad
5.1 Vulnerabilidadescrosssite
6 Herramientasdedesarrollo
7 Vasetambin
8 Referencias
9 Bibliografa
10 Enlacesexternos

la

Historia
NacimientodeJavaScript
JavaScript fue desarrollado originalmente por Brendan Eich de Netscape con el nombre de Mocha, el cual fue
renombradoposteriormenteaLiveScript,parafinalmentequedarcomoJavaScript.Elcambiodenombrecoincidi
aproximadamenteconelmomentoenqueNetscapeagregcompatibilidadconlatecnologaJavaensunavegador
webNetscapeNavigatorenlaversin2.002endiciembrede1995.Ladenominacinprodujoconfusin,dandola
impresindequeellenguajeesunaprolongacindeJava,ysehacaracterizadopormuchoscomounaestrategia
de mercadotecnia de Netscape para obtener prestigio e innovar en lo que eran los nuevos lenguajes de
programacinweb.78
JAVASCRIPTesunamarcaregistradadeOracleCorporation.9Esusadaconlicenciaporlosproductoscreados
porNetscapeCommunicationsyentidadesactualescomolaFundacinMozilla.1011
MicrosoftdiocomonombreasudialectodeJavaScriptJScript,paraevitarproblemasrelacionadasconlamarca.
JScriptfueadoptadoenlaversin3.0deInternetExplorer,liberadoenagostode1996,eincluycompatibilidad
conelEfecto2000conlasfuncionesdefecha,unadiferenciadelosquesebasabanenesemomento.Losdialectos
puedenparecertansimilaresquelostrminosJavaScriptyJScriptamenudoseutilizanindistintamente,pero
laespecificacindeJScriptesincompatibleconladeECMAenmuchosaspectos.
Paraevitarestasincompatibilidades,elWorldWideWebConsortiumdiseelestndarDocumentObjectModel
(DOM,oModelodeObjetosdelDocumentoenespaol),queincorporanKonqueror,lasversiones6deInternet
ExploreryNetscapeNavigator,Operalaversin7,MozillaApplicationSuiteyMozillaFirefoxdesdesuprimera
versin.[citarequerida]
En1997losautorespropusieron12 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.Enjuniode1997fueadoptadocomounestndarECMA,conelnombredeECMAScript.Pocodespus
tambincomounestndarISO.
https://es.wikipedia.org/wiki/JavaScript

2/14

9/9/2016

JavaScript - Wikipedia, la enciclopedia libre

JavaScriptenelladoservidor
NetscapeintrodujounaimplementacindescriptdelladodelservidorconNetscapeEnterpriseServer,lanzadaen
diciembrede1994(pocodespusdellanzamientodeJavaScriptparanavegadoresweb).1314Apartirdemediados
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.1516

Desarrollosposteriores
JavaScriptsehaconvertidoenunodeloslenguajesdeprogramacinmspopulareseninternet.Alprincipio,sin
embargo, muchos desarrolladores renegaban del lenguaje porque el pblico al que va dirigido lo formaban
publicadoresdeartculosydemsaficionados,entreotrasrazones.17LallegadadeAjaxdevolviJavaScriptala
famayatrajolaatencindemuchosotrosprogramadores.Comoresultadodeestohubounaproliferacindeun
conjuntodeframeworksylibrerasdembitogeneral,mejorandolasprcticasdeprogramacinconJavaScript,y
aumentadoelusodeJavaScriptfueradelosnavegadoresweb,comosehavistoconlaproliferacindeentornos
JavaScript del lado del servidor. En enero de 2009, el proyecto CommonJS fue inaugurado con el objetivo de
especificarunalibreraparausodetareascomunesprincipalmenteparaeldesarrollofueradelnavegadorweb.18
Enjuniode2015secerrypublicelestndarECMAScript61920(ltimaversinhastalafecha)conunsoporte
irregularentrenavegadores21yquedotaaJavaScriptdecaractersticasavanzadasqueseechabandemenosyque
sondeusohabitualenotroslenguajescomo,porejemplo,mdulosparaorganizacindelcdigo,verdaderasclases
para programacin orientada a objetos, expresiones de flecha, iteradores, generadores o promesas para
programacinasncrona.

Caractersticas
LassiguientescaractersticassoncomunesatodaslasimplementacionesqueseajustanalestndarECMAScript,a
menosqueespecifiqueexplcitamenteencasocontrario.

Imperativoyestructurado
JavaScriptescompatiblecongranpartedelaestructuradeprogramacindeC(porejemplo,sentencias if,bucles
for,sentencias switch,etc.).Conunasalvedad,enparte:enC,elmbitodelasvariablesalcanzaalbloqueenel
cualfuerondefinidassinembargoJavaScriptnoescompatibleconesto,puestoqueelmbitodelasvariablesesel
de la funcin en la cual fueron declaradas. Esto cambia con la versin de JavaScript 1.7, ya que aade
compatibilidadconblockscopingpormediodelapalabraclave let.ComoenC,JavaScripthacedistincinentre
expresionesysentencias.UnadiferenciasintcticaconrespectoaCeslainsercinautomticadepuntoycoma,es
decir,enJavaScriptlospuntosycomaquefinalizanunasentenciapuedenseromitidos.22

Dinmico
Tipadodinmico
Comoenlamayoradelenguajesdescripting,eltipoestasociadoalvalor,noalavariable.Porejemplo,
unavariable xenunmomentodadopuedeestarligadaaunnmeroymsadelante,religadaaunacadena.
JavaScript es compatible con varias formas de comprobar el tipo de un objeto, incluyendo duck typing.23
Unaformadesaberloespormediodelapalabraclavetypeof.
Objetual
https://es.wikipedia.org/wiki/JavaScript

3/14

9/9/2016

JavaScript - Wikipedia, la enciclopedia libre

JavaScriptestformadocasiensutotalidadporobjetos.LosobjetosenJavaScriptsonarrays asociativos,
mejoradosconlainclusindeprototipos(vermsadelante).Losnombresdelaspropiedadesdelosobjetos
sonclavesdetipo cadena: obj.x=10y obj['x']=10 son equivalentes, siendo la notacin con punto
azcarsintctico.Laspropiedadesysusvalorespuedensercreados,cambiadosoeliminadosentiempode
ejecucin.Lamayoradepropiedadesdeunobjeto(yaquellasquesonincluidasporlacadenadelaherencia
prototpica)puedenserenumeradasapormediodelainstruccindebucle for... in.JavaScripttieneun
pequeonmerodeobjetospredefinidoscomosonFunctionyDate.
Evaluacinentiempodeejecucin
JavaScript incluye la funcin eval que permite evaluar expresiones como expresadas como cadenas en
tiempodeejecucin.Porelloserecomiendaqueevalseautilizadoconprecaucinyqueseopteporutilizar
lafuncinJSON.parse()enlamedidadeloposible,puesresultamuchomssegura.

Funcional
Funcionesdeprimeraclase
Alasfuncionesselessuelellamarciudadanosdeprimeraclasesonobjetosensmismos.Comotal,poseen
propiedadesymtodos,como.call()y.bind().24Unafuncinanidadaesunafuncindefinidadentrode
otra.Estaescreadacadavezquelafuncinexternaesinvocada.Adems,cadafuncincreadaformauna
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
resultadodelaevaluacindedichaclausuraformapartedelestadointernodecadaobjetofuncin,incluso
despusdequelafuncinexteriorconcluyasuevaluacin.25

Prototpico
Prototipos
JavaScriptusaprototiposenvezdeclasesparaelusodeherencia.26Esposiblellegaraemularmuchasdelas
caractersticas que proporcionan las clases en lenguajes orientados a objetos tradicionales por medio de
prototiposenJavaScript.27
Funcionescomoconstructoresdeobjetos
Lasfuncionestambin se comportancomo constructores. Prefijar una llamadaalafuncinconlapalabra
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
prototypedelconstructordeterminaelobjetousadoparaelprototipointernodelosnuevosobjetoscreados.
Se pueden aadir nuevos mtodos modificando el prototipo del objeto usado como constructor.
ConstructorespredefinidosenJavaScript,como Arrayu Object,tambintienenprototiposquepuedenser
modificados.AunqueestoseaposibleseconsideraunamalaprcticamodificarelprototipodeObjectyaque
lamayoradelosobjetosenJavascriptheredanlosmtodosypropiedadesdelobjetoprototype,objetoslos
cualespuedenesperarqueestosnohayansidomodificados.30

Otrascaractersticas
Entornodeejecucin
JavaScriptnormalmentedependedelentornoenelqueseejecute(porejemplo,enunnavegadorweb)para
ofrecer objetos y mtodos por los que los scripts pueden interactuar con el "mundo exterior". De hecho,
dependedelentornoparasercapazdeproporcionarlacapacidaddeincluiroimportarscripts(porejemplo,
enHTML por medio del tag <script>). (Esto no es una caracterstica del lenguaje, pero es comn en la
mayoradelasimplementacionesdeJavaScript.)
https://es.wikipedia.org/wiki/JavaScript

4/14

9/9/2016

JavaScript - Wikipedia, la enciclopedia libre

Funcionesvaridicas
Unnmeroindefinidodeparmetrospuedenserpasadosalafuncin.Lafuncinpuedeaccederaellosa
travsdelosparmetrosotambinatravsdelobjetolocal arguments.Lasfunciones varidicas tambin
puedensercreadasusandoelmtodo.apply().
Funcionescomomtodos
Adiferenciademuchoslenguajesorientadosaobjetos,nohaydistincinentreladefinicindefuncinyla
definicindemtodo.Msbien,ladistincinseproducedurantelallamadaalafuncinunafuncinpuede
serllamadacomounmtodo.Cuandounafuncinesllamadacomounmtododeunobjeto,lapalabraclave
this,queesunavariablelocalalafuncin,representaalobjetoqueinvocdichafuncin.
Arraysyladefinicinliteraldeobjetos
Aligualquemuchoslenguajesdescript,arraysyobjetos(arraysasociativosen otrosidiomas) puedenser
creadosconunasintaxisabreviada.Dehecho,estosliteralesformanlabasedelformatodedatosJSON.
Expresionesregulares
JavaScripttambinescompatibleconexpresionesregularesdeunamanerasimilaraPerl,queproporcionan
una sintaxis concisa y poderosa para la manipulacin de texto que es ms sofisticado que las funciones
incorporadasalosobjetosdetipostring.31

Extensionesespecficasdelfabricante
JavaScript se encuentra oficialmente bajo la organizacin de Mozilla Foundation, y peridicamente se aaden
nuevas caractersticas del lenguaje. Sin embargo, slo algunos motores JavaScript son compatibles con estas
caractersticas:
Laspropiedadesgetyset(tambincompatiblesconWebKit,Opera,32ActionScriptyRhino).33
Clusulascatchcondicionales.
ProtocoloiteradoradoptadodePython.
CorrutinastambinadoptadasdePython.
GeneracindelistasyexpresionesporcomprensintambinadoptadodePython.
Establecerelmbitoabloqueatravsdelapalabraclavelet.
Desestructuracindearraysyobjetos(formalimitadeemparejamientodepatrones).
Expresionesconcretasenfunciones(function(args)expr).
ECMAScriptparaXML(E4X),unaextensinqueaadecompatibilidadnativaXMLaECMAScript.

Sintaxisysemntica
A partir del 2011, la ltima versin del lenguaje es JavaScript 1.8.5. Es un superconjunto de la especificacin
ECMAScript (ECMA262) Edicin 3. Extensiones del lenguaje, que incluyen compatibilidad parcial con
ECMAScript para XML (E4X) (ECMA357) y caractersticas experimentales consideradas para ser incluidas en
futurasedicionesdelECMAScript,documentadasaqu.34

Ejemplossencillos
LasvariablesenJavaScriptsedefinenusandolapalabraclavevar: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

Aconsiderarloscomentariosenelejemplodearriba,loscualesvanprecedidoscon2barrasdiagonales.
https://es.wikipedia.org/wiki/JavaScript

5/14

9/9/2016

JavaScript - Wikipedia, la enciclopedia libre

No existen funcionalidades para I/O incluidas en el lenguaje el entorno de ejecucin ya lo proporciona. La


especificacinECMAScriptensuedicin5.1hacemencin:36
...enefecto,noexistenprovisionesenestaespecificacinparaentradadedatosexternososalidapara
resultadoscomputados.
Sinembargo,lamayoradelosentornosdeejecucintieneunobjeto37llamadoconsolequepuedeserusadopara
imprimir por el flujo de salida de la consola de depuracin. He aqu un simple programa que imprime Hello
world!:
console.log("Hello world!");

Unafuncinrecursiva:
function factorial(n) {
if (n === 0) {
return 1;
}
return n * factorial(n - 1);
}

Ejemplosdefuncinannima(ofuncinlambda)yunaclausura:
var displayClosure = function() {
var count = 0;
return function () {
return ++count;
};
}
var inc = displayClosure();
inc(); // devuelve 1
inc(); // devuelve 2
inc(); // devuelve 3

Lasexpresionesconinvocacinautomticapermitenalasfuncionespasarlevariablesporparmetrodentrodesus
propiasclausuras.
var v;
v = 1;
var getValue = (function(v) {
return function() {return v;};
}(v));
v = 2;
getValue(); // 1

Ejemplosmsavanzados
ElsiguientecdigomuestravariascaractersticasdeJavaScript.
/* 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
https://es.wikipedia.org/wiki/JavaScript

6/14

9/9/2016

JavaScript - Wikipedia, la enciclopedia libre


}
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 construct
LCMCalculator.prototype = { // objeto definido como literal
constructor: LCMCalculator, // cuando reasignamos un prototipo, establecemos correctamente su propiedad constructo
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
// this.gcd se refiere a esta 'redefinicin' en vez de a LCMCalculator.prototype.gcd).
// Adems, 'gcd' === "gcd", this['gcd'] === this.gcd
this['gcd'] = function () {
return a;
};
return a;
},
// Los nombres de las propiedades del objeto pueden ser especificados con cadenas delimitadas con comillas simples
"lcm" : function () {
// Los nombres de las variables no colisionan con las propiedades del objeto. Por ejemplo: |lcm| no es |this.l
// No usar |this.a * this.b| para evitar problemas con clculos en coma flotante.
var lcm = this.a / this.gcd() * this.b;
// Slo necesitamos calcular MCM una vez, por lo tanto "redefinimos" este mtodo.
this.lcm = function () {
return lcm;
};
return lcm;
},
toString: function () {
return "LCMCalculator: a = " + this.a + ", b = " + this.b;
}
};

// Definimos una funcin genrica para imprimir un resultado; esta implementacin solo funciona en los navegadores web
function output(x) {
document.body.appendChild(document.createTextNode(x));
document.body.appendChild(document.createElement('br'));
}

// Nota: Los mtodos.map() y.forEach() del prototipo Array estn definidos en JavaScript 1.6.
// Estos mtodos son usados aqu para demostrar la naturaleza funcional inherente del lenguaje.
[[25, 55], [21, 56], [22, 58], [28, 56]].map(function (pair) { // construccin literal de un Array + funcin de mapeo.
return new LCMCalculator(pair[0], pair[1]);
}).sort(function (a, b) { // ordenamos la coleccin por medio de esta funcin
return a.lcm() - b.lcm();
}).forEach(function (obj) {
output(obj + ", gcd = " + obj.gcd() + ", lcm = " + obj.lcm());
});

Elsiguienteejemplomuestralasalidaquedeberasermostradaenlaventanadeunnavegador.
LCMCalculator: a = 28, b = 56, gcd = 28, lcm = 56
LCMCalculator: a = 21, b = 56, gcd = 7, lcm = 168

https://es.wikipedia.org/wiki/JavaScript

7/14

9/9/2016

JavaScript - Wikipedia, la enciclopedia libre

LCMCalculator: a = 25, b = 55, gcd = 5, lcm = 275


LCMCalculator: a = 22, b = 58, gcd = 2, lcm = 638

Usoenpginasweb
Vansetambin:IntrpretedeJavaScriptyAJAX.

ElusomscomndeJavaScriptesescribirfuncionesembebidasoincluidasenpginasHTMLyqueinteractan
con el Document Object Model (DOM o Modelo de Objetos del Documento) de la pgina. Algunos ejemplos
sencillosdeesteusoson:
CargarnuevocontenidoparalapginaoenviardatosalservidoratravsdeAJAXsinnecesidadderecargar
lapgina(porejemplo,unaredsocialpuedepermitiralusuarioenviaractualizacionesdeestadosinsalirde
lapgina).
Animacindeloselementosdepgina,hacerlosdesaparecer,cambiarsutamao,moverlos,etc.
Contenidointeractivo,porejemplo,juegosyreproduccindeaudioyvdeo.
Validacindelosvaloresdeentradadeunformulariowebparaasegurarsedequesonaceptablesantesdeser
enviadoalservidor.
Transmisindeinformacinsobreloshbitosdelecturadelosusuariosylasactividadesdenavegacina
varios sitios web. Las pginas Web con frecuencia lo hacen para hacer anlisis web, seguimiento de
anuncios,lapersonalizacinoparaotrosfines.38
DadoqueelcdigoJavaScriptpuedeejecutarselocalmenteenelnavegadordelusuario(enlugardeenunservidor
remoto), el navegador puede responder a las acciones del usuario con rapidez, haciendo una aplicacin ms
sensible. Por otra parte, el cdigo JavaScript puede detectar acciones de los usuarios que HTML por s sola no
puede, como pulsaciones de teclado. Las aplicaciones como Gmail se aprovechan de esto: la mayor parte de la
lgica de la interfaz de usuario est escrita en JavaScript, enviando peticiones al servidor (por ejemplo, el
contenidodeunmensajedecorreoelectrnico).LatendenciacadavezmayorporelusodelaprogramacinAjax
explotademanerasimilarestatcnica.
Un motor de JavaScript (tambin conocido como intrprete de JavaScript o implementacin JavaScript) es un
intrprete que interpreta el cdigo fuente de JavaScript y ejecuta la secuencia de comandos en consecuencia. El
primer motor de JavaScript fue creado por Brendan Eich en Netscape Communications Corporation, para el
navegador web Netscape Navigator. El motor, denominado SpiderMonkey, est implementado en C. Desde
entonces, ha sido actualizado (en JavaScript 1.5) para cumplir con el ECMA262 edicin 3. El motor Rhino,
creadoprincipalmenteporNorrisBoyd(antesdeNetscape,ahoraenGoogle)esunaimplementacindeJavaScript
enJava.Rhino,comoSpiderMonkey,escompatibleconelECMA262edicin3.
Unnavegadorwebes,conmucho,elentornodeacogidamscomnparaJavaScript.Losnavegadoreswebsuelen
crear objetos no nativos, dependientes del entorno de ejecucin, para representar el Document Object Model
(DOM) en JavaScript. El servidor web es otro entorno comn de servicios. Un servidor web JavaScript suele
exponersuspropios objetos para representar objetos de peticin y respuesta HTTP,queunprogramaJavaScript
podraentoncesinterrogarymanipularparagenerardinmicamentepginasweb.
DebidoaqueJavaScripteselnicolenguajeporelquelosmspopularesnavegadorescompartensuapoyo,seha
convertidoenunlenguajealquemuchosframeworksenotroslenguajescompilan,apesardequeJavaScriptno
fue diseado para tales propsitos.39 A pesar de las limitaciones de rendimiento inherentes a su naturaleza
dinmica,elaumentodelavelocidaddelosmotoresdeJavaScripthahechodeestelenguajeunentornoparala
compilacinsorprendentementefactible.

Ejemplodescript
https://es.wikipedia.org/wiki/JavaScript

8/14

9/9/2016

JavaScript - Wikipedia, la enciclopedia libre

A continuacin se muestra un breve ejemplo de una pgina web (ajustadose a las normas del estndar para
HTML5)queutilizaJavaScriptparaelmanejodelDOM:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Ejemplo sencillo</title>
<h1 id="header">Esto es JavaScript</h1>
<script>
document.body.appendChild(document.createTextNode('Hola Mundo!'));
var h1 = document.getElementById('header'); // contiene la referencia al tag <h1>
h1 = document.getElementsByTagName('h1')[0]; // accediendo al mismo elemento <h1>
</script>
<noscript>Tu navegador no admite JavaScript, o JavaScript est deshabilitado.</noscript>
</head>
<body>/*...*/</body>
</html>

Consideracionesacercadelacompatibilidad
DebidoaqueJavaScriptseejecutaenentornosmuyvariados,unaparteimportantedelaspruebasyladepuracin
esprobaryverificarqueelcdigoJavaScriptfuncionacorrectamenteenmltiplesnavegadores.LainterfazDOM
paraaccederymanipularpginaswebnoespartedelestndarECMAScript,odelapropiaJavaScript.ElDOMes
definido por los esfuerzos de estandarizacin del W3C, una organizacin independiente. En la prctica, las
implementacionesquehacendeJavaScriptlosdistintosnavegadoresdifierentantoentreellosmismoscomodelas
normasdelestndar.
Parahacerfrenteaestasdiferencias,losautoresdeJavaScriptpudieronsercapacesdeescribircdigocompatible
conlosestndaresquetambinfueracapazdeejecutarsecorrectamenteenlamayoradelosnavegadores,oensu
defecto,quealmenossepudieraescribircdigocapazdecomprobarlapresenciadeciertasfuncionalidadesdel
navegadoryquesecomportasedemaneradiferentesinosedispusiesededichafuncionalidad.40Existencasosen
los que dos navegadores pueden llegar a implementar la misma caracterstica, pero con un comportamiento
diferente, hecho que a los programadores les puede resultar de ayuda para detectar qu navegador se est
ejecutando en ese instante y as cambiar el comportamiento de su escritura para que coincida.41 42 Los
programadores tambin suelen utilizar bibliotecas o herramientas que tengan en cuenta las diferencias entre
navegadores.
Adems,losscriptspuedennofuncionarparaalgunosusuarios.Porejemplo,unusuariopuede:
utilizarunnavegadorantiguosincompatibilidadcompletaconlaAPIDOM,
utilizarunnavegadorPDAotelfonomvilquenopuedeejecutarJavaScript
tenerlaejecucindeJavaScriptdeshabilitada,comoprecaucindeseguridad,
utilizarunnavegadordevozdebidoa,porejemplo,unadiscapacidadvisual.
Para apoyar a estos usuarios, los programadores web suelen crear pginas que sean tolerante a fallos segn el
agentedeusuario(tipodenavegador)quenoadmitaJavaScript.Enparticular,lapginadebeseguirsiendotil
aunque sin las caractersticas adicionales que JavaScript habra aadido. Un enfoque alternativo que muchos
encuentran preferible es primero crear contenido utilizando las tecnologas que funcionan en todos los
navegadores,ymejorarelcontenidoparalosusuariosquehanpermitidoJavaScript.

Accesibilidad
https://es.wikipedia.org/wiki/JavaScript

9/14

9/9/2016

JavaScript - Wikipedia, la enciclopedia libre

SuponiendoqueelusuarionohayadesactivadolaejecucindecdigoJavaScript,enelladodelclienteJavaScript
debeserescritotantoconelpropsitodemejorarlasexperienciasdelosvisitantescondiscapacidadvisualofsica,
comoeldeevitarocultarinformacinaestosvisitantes.43
Los lectores de pantalla, utilizados por los ciegos y deficientes visuales, pueden ser tenidos en cuenta por
JavaScriptyaspoderaccederyleerloselementosDOMdelapgina.ElcdigoHTMLescritodebeserloms
conciso,navegableysemnticamentericoposible,tantosiJavaScriptseejecutacomosino.
JavaScriptnodeberadesertotalmentedependientedeloseventosderatndelnavegadorydeberaseraccesible
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
preferiblesenlamayoradeloscasos.43
JavaScript no debe ser utilizado para crear confusin o desorientacin al usuario web. Por ejemplo, modificar o
desactivarlafuncionalidadnormaldelnavegador,comocambiarlaformaenqueelbotndenavegarhaciaatrso
el evento de actualizacin se comportan, son prcticas que generalmente son mejores evitar. Igualmente,
desencadenareventosqueelusuariopuedenotenerencuentareducelasensacindecontroldelusuarioyprovoca
cambiosinesperadosalcontenidodelapgina.44
Amenudo,elprocesodedotaraunapginawebcomplejaelmayorgradoaccesibilidadposible,seconvierteenun
problema no trivial donde muchos temas se acaban llevando al debate y a la opinin, siendo necesario el
compromisodetodoshastaelfinal.Sinembargo,losagentesdeusuarioylastecnologasdeapoyoapersonascon
discapacidadestnenconstanteevolucinynuevasdirectriceseinformacinalrespectosiguenpublicndoseenla
web.43

Seguridad
Vasetambin:Seguridaddelnavegador

JavaScriptyelDOMpermitequeexistanprogramadoresquehaganunusoinapropiadoparaintroducirscriptsque
ejecuten cdigo con contenido malicioso sin el consentimiento del usuario y que pueda as comprometer su
seguridad.
Losdesarrolladoresdelosnavegadorestienenencuentaesteriesgoutilizandodosrestricciones.Enprimerlugar,
losscriptsseejecutanenunsandboxenelqueslosepuedenllevaracaboaccionesrelacionadasconlaweb,no
contareasdeprogramacindepropsitogeneral,comolacreacindearchivos.Ensegundolugar,estlimitada
porlapolticadelmismoorigen:losscriptsdeunsitiowebnotienenaccesoalainformacinenviadaaotrositio
web(deotrodominio)comopudierasernombresdeusuario,contraseasocookies.Lamayoradelosfallosde
seguridaddeJavaScriptestnrelacionadosconviolacionesdecualquieradeestasdosrestricciones.
ExistenproyectoscomoAdSafeoSecureECMAscript(SES)queproporcionanmayoresnivelesdeseguridad,en
especialenelcdigocreadoporterceros(talescomolosanuncios).4546
La Poltica de Contenido Seguro (CSP) es el mtodo principal previsto para garantizar que slo cdigo de
confianzapuedaserejecutadoenunapginaweb.

Vulnerabilidadescrosssite
UnproblemacomndeseguridadenJavaScripteselcrosssitescripting o XSS, una violacin de la poltica de
mismo origen. Las vulnerabilidades XSS permiten a un atacante inyectar cdigo JavaScript en pginas web
visitadasporelusuario.Unadeesaswebspodraserladeunbanco,pudiendoelatacanteaccederalaaplicacin
https://es.wikipedia.org/wiki/JavaScript

10/14

9/9/2016

JavaScript - Wikipedia, la enciclopedia libre

de banca con los privilegios de la vctima, lo que podra revelar informacin secreta o transferir dinero sin la
autorizacin de la vctima. Una solucin para las vulnerabilidades XSS es utilizar HTML escapar cuando la
visualizacindedatosnoconfiables.
Algunos navegadores incluyen una proteccin parcial contra los ataques XSS reflejados (el atacante est en la
misma peticin web). El atacante proporciona una URL incluyendo cdigo malicioso. Sin embargo, incluso los
usuarios de los navegadores son vulnerables a otros ataques XSS, tales como aquellos en los que el cdigo
maliciososealmacenaenunabasededatos.SloelcorrectodiseodelasaplicacionesWebenlaparteservidora
puedeprevenirtotalmenteXSS.LasvulnerabilidadesXSStambinpuedenocurrirdebidoaerroresdeejecucin
porlosdesarrolladoresdelnavegador.47
Otra vulnerabilidad es la falsificacin de peticin de sitio cruzado o CSRF. En CSRF, el cdigo del sitio web
atacanteengaaalnavegadordelavctima,permitiendoalatacanterealizarpeticionesennombredelavctima,
haciendo imposible saber a la aplicacin de destino (por ejemplo, la de un banco haciendo una transferencia de
dinero)sabersilapeticinhasidorealizadavoluntariamenteporelusuariooporunataqueCSRF.
Elataquefuncionaporque,sielsitiodedestinohaceusonicamentedelascookiesparaautenticarlassolicitudes
de la vctima, las peticiones iniciadas por el cdigo del atacante tendrn las mismas credenciales de acceso
legtimoquelassolicitudesiniciadasporelpropiousuario.
En general, la solucin a CSRF consiste en introducir un campo de formulario oculto cuyo valor se utilice para
realizarlaautenticacin,ynoslopormediodelascookies,ensolicitudesquepuedantenerefectosduraderos.La
comprobacindelacabeceraHTTPreferertambinpuedeservirdeayuda.
"Hijacking JavaScript" es un tipo de ataque CSRF en el que una etiqueta <script> en el sitio web del atacante
explotaunavulnerabilidadenlapginadelsitiodelavctimaquelehacedevolverinformacinprivada,enforma
deJSONocdigoJavaScript.Lasposiblessolucionesson:
que se requiera un token de autenticacin en los parmetros de las peticiones POST y GET para aquellas
peticionesquerequierandevolverinformacinprivadadelusuario.
usarPOSTynuncaGETparasolicitudesquedevuelveninformacinprivada

Herramientasdedesarrollo
EnJavaScript,disponerdeundepuradorseconvierteennecesariocuandosedesarrollangrandesaplicaciones,no
triviales.Dadoquepuedehaberdiferenciasdeimplementacinentrelosdiferentesnavegadores(especialmenteen
cuanto al DOM), es til tener acceso a un depurador para cada uno de los navegadores a los cuales nuestra
aplicacinwebirdirigido.48
LosdepuradoreswebestndisponiblesparaInternetExplorer,Firefox,Safari,GoogleChromeyOpera.49
Existen tres depuradores disponibles para InternetExplorer: Microsoft Visual Studio es el ms avanzado de los
tres,seguidodecercaporMicrosoftScriptEditor(uncomponentedeMicrosoftOffice)50y,finalmente,Microsoft
ScriptDebugger,queesmuchomsbsicoqueelotrodos,aunqueesgratuito.ElIDEgratuitoMicrosoftVisual
Web Developer Express ofrece una versin limitada de la funcionalidad de depuracin de JavaScript en el
MicrosoftVisualStudio.InternetExplorerhaincluidoherramientasdedesarrollodesdelaversin8(semuestra
pulsandolateclaF12).LasaplicacioneswebdentrodeFirefoxsepuedendepurarusandoelFirebugaddonoel
antiguodepuradorVenkman.Firefoxtambintieneintegradaunaconsoladeerroresbsica,queregistrayevala
JavaScript.TambinregistraerroresdeCSSyadvertencias.Operaincluyeunconjuntodeherramientasllamado
Dragonfly.51ElInspectorWebdeWebKitincluyeundepuradordeJavaScript52utilizadoenSafari,juntoconuna
versinmodificadadeGoogleChrome.
https://es.wikipedia.org/wiki/JavaScript

11/14

9/9/2016

JavaScript - Wikipedia, la enciclopedia libre

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 por Douglas Crockford, quien ha escrito
extensamentesobreellenguaje.JSLintanalizaelcdigoJavaScriptparaqueestequedeconformeconunconjunto
denormasydirectricesyqueaseguransucorrectofuncionamientoymantenibilidad.

Vasetambin
VBScript
AJAX
Aplicacinweb
DocumentObjectModel
JSON
HTML

Referencias
(en ingls). Consultado el 29 de agosto de 2013.
1.DouglasCrockfordonFunctionalJavaScript(http://web.
JavaScript is a trademark or registered trademark of
archive.org/web/http://www.blinkx.com/video/douglascr
OracleintheU.S.andothercountries.
ockfordonfunctionalJavaScript/xscZz8XhfuNQ_aaVu
12.NetscapeComunicadodeprensa(castellano)(http://cgi.n
yUB2A) (2:49): "[JavaScript] es el lenguaje funcional
etscape.com/newsref/pr/newsrelease289.html)
mspopulardelmundo.JavaScriptesysiemprehasido,
13.Chapter 2: Getting Started (http://docs.oracle.com/cd/
al menos desde [la versin] 1.2, un lenguaje de
E1995701/816641110/getstart.htm).
ServerSide
programacinfuncional."
JavaScript
Guide.
Netscape
Communications
2.RFC4329(http://web.archive.org/web/http://www.apps.i
Corporation.1998.Consultadoel25deabrilde2012.
etf.org/rfc/rfc4329.html)
14.Mike Morgan (1996). Chapter 6: Netscape Internet
3.http://www.ecma
Application Framework (http://web.archive.org/web/htt
international.org/publications/files/ECMAST/ECMA
p://vampire.rulez.org/onlinedoc/book/NetscapeLiveWire/
262.pdf
ch6.htm). Using Netscape LiveWire, Special
4.M. DomnguezDorado,. Todo Programacin. N 12.
Edition.Que.Archivadodesdeeloriginal(http://vampir
Pgs.4851.EditorialIberprensa(Madrid).DLM13679
e.rulez.org/onlinedoc/book/NetscapeLiveWire/ch6.htm)
2004.Septiembrede2005.Bases de datos en el cliente
el27denoviembrede2015.
conJavaScriptDB.
15.ServerSideJavascript:BackWithaVengeance(http://
5.Eich, Brendan (13 de agosto de 2008). ECMAScript
www.readwriteweb.com/archives/serverside_javascript_
Harmony(https://mail.mozilla.org/pipermail/esdiscuss/
back_with_a_vengeance.php). Read Write Web. 17 de
2008August/003400.html).Consultadoel22dejuliode
diciembrede2009.Consultadoel28demayode2012.
2015.
16.Node'sgoalistoprovideaneasywaytobuildscalable
6.campusMVP(19dejuniode2015).ECMAScript6es
network programs (http://nodejs.org/about/). About
yaunestndarcerrado(http://www.campusmvp.es/recu
Node.js.Joyent.
rsos/post/ECMAScript6esyaunestandarcerrado.asp
17.JavaScript: The World's Most Misunderstood
x).Consultadoel22dejuliode2015.
ProgrammingLanguage(http://www.crockford.com/jav
7.Lenguajes de programacin usados en Internet y la
ascript/javascript.html). Crockford.com. Consultado el
WorldWideWeb(WWW)(castellano)(http://www.web
19demayode2009.
developersnotes.com/basics/languages_on_the_internet.p
18.Kris Kowal (1 de diciembre de 2009). CommonJS
hp3)
effortsetsJavaScriptonpathforworlddomination(htt
8..com/0596101996/jscript5CHP1 O'Reilly Safari
p://arstechnica.com/web/news/2009/12/commonjseffort
BooksOnline0596101996JavaScript:TheDefinitive
setsjavascriptonpathforworlddomination.ars). Ars
Guide,5edicin(castellano)(http://safari.oreilly)
Technica.CondNastPublications.Consultadoel18de
9.http://tsdr.uspto.gov/#caseNumber=75026640&caseType=SERIAL_NO&searchType=statusSearch
abrilde2010.
10.MarcasregistradasdeOracle(http://www.oracle.com/us/
19.ECMAInternational(Juniode2015).StandardECMA
legal/thirdpartytrademarks/index.html).
2626thEdition(http://www.ecmainternational.org/pub
11.About JavaScript (https://developer.mozilla.org/enU
lications/standards/Ecma262.htm).
S/docs/Web/JavaScript/About_JavaScript?redirectlocale
20.campusMVP(19dejuniode2015).ECMAScript6ya
=enUS&redirectslug=JavaScript%2FAbout_JavaScript)
esunestndarcerrado(http://www.campusmvp.es/recur
https://es.wikipedia.org/wiki/JavaScript

12/14

9/9/2016

JavaScript - Wikipedia, la enciclopedia libre

sos/post/ECMAScript6esyaunestandarcerrado.aspx).
Consultadoel22dejuliode2015.
21.Tabla de compatibilidadde navegadores con
ECMAScript6(Ingls)(http://kangax.github.io/compat
table/es6/).
22.Flanagan,2006,p.16.
23.Flanagan,2006,pp.176178.
24.PropertiesoftheFunctionObject(http://es5.github.com/
#x15.3.4toc)
25.Flanagan,2006,p.141.
26.Inheritanceandtheprototypechain(https://developer.
mozilla.org/enUS/docs/JavaScript/Guide/Inheritance_an
d_the_prototype_chain). Mozilla Developer Network.
Mozilla.Consultadoel6deabrilde2013.
27.Herman, David (2013). Effective Javascript. Addison
Wesley.p.83.ISBN9780321812186.
28.Haverbeke, Marjin (2011). Eloquent Javascript. No
StarchPress.pp.9597.ISBN9781593272821.
29.Katz, Yehuda. Understanding "Prototypes" in
JavaScript (http://yehudakatz.com/2011/08/12/understa
ndingprototypesinjavascript/).Consultadoel6deabril
de2013.
30.Herman, David (2013). Effective Javascript. Addison
Wesley.pp.125127.ISBN9780321812186.
31.Haverbeke, Marijn (2011). Eloquent JavaScript. No
StarchPress.pp.139149.ISBN9781593272821.
32.Robert Nyman, Getters And Setters With JavaScript
CodeSamplesAndDemos (http://robertnyman.com/200
9/05/28/gettersandsetterswithjavascriptcodesamples
anddemos/), published 29 May 2009, accessed 2
January2010.
33.JohnResig,JavaScriptGettersandSetters(http://ejohn.o
rg/blog/javascriptgettersandsetters/), 18 July 2007,
accessed2January2010
34.MDNAboutthisReference(https://developer.mozill
a.org/en/JavaScript/Reference/About#JavaScript_histor
y). Developer.mozilla.org. 31 de agosto de 2008.
Consultadoel19demayode2009.
35.varJavaScriptMDN(https://developer.mozilla.org/
enUS/docs/JavaScript/Reference/Statements/var). The
Mozilla Developer Network. Consultado el 22 de
diciembrede2012.
36.ECMAScript Language Specification ECMA262
Edition 5.1 (http://www.ecmainternational.org/ecma2
62/5.1/#sec4).EcmaInternational. Consultado el 22 de
diciembrede2012.

37.console (https://developer.mozilla.org/enUS/docs/DO
M/console). Mozilla Developer Network. Mozilla.
Consultadoel6deabrilde2013.
38.JavaScripttrackingPiwik(http://piwik.org/docs/java
scripttracking/). Piwik. Consultado el 31 de marzo de
2012.
39.Hamilton, Naomi (31 de junio de 2008). The AZ of
ProgrammingLanguages:JavaScript(http://www.comp
uterworld.com.au/article/255293/z_programming_langu
ages_javascript).computerworld.com.au.
40.PeterPaulKoch,Objectdetection(http://www.quirksmo
de.org/js/support.html)
41.PeterPaulKoch,MissionImpossiblemouseposition(h
ttp://www.evolt.org/node/23335)
42.PeterPaulKoch,Browserdetect (http://www.quirksmod
e.org/js/detect.html)
43.Flanagan,2006,pp.262263.
44.CreatingAccessibleJavaScript(http://www.webaim.or
g/techniques/javascript/). WebAIM. Consultado el 8 de
juniode2010.
45.ADsafeMakingJavaScriptSafeforAdvertising(http://
www.adsafe.org/)
46.SecureECMAScript(SES)(http://code.google.com/p/es
lab/wiki/SecureEcmaScript)
47.MozillaZine, Mozilla CrossSite Scripting Vulnerability
Reported and Fixed (http://www.mozillazine.org/talkbac
k.html?article=4392)
48.AdvancedDebuggingWithJavaScript (http://www.ali
stapart.com/articles/advanceddebuggingwithjavascrip
t/). alistapart.com. 3 de febrero de 2009. Consultado el
28demayode2010.
49.TheJavaScriptDebuggingConsole(http://javascript.a
bout.com/od/problemsolving/ig/JavaScriptDebugging/).
javascript.about.com.28demayode2010.Consultadoel
28demayode2010.
50.JScriptdevelopmentinMicrosoftOffice11(http://msdn
2.microsoft.com/enus/library/aa202668(office.11).aspx)
(MSInfoPath2003)
51.Opera DragonFly (http://www.opera.com/dragonfly/).
OperaSoftware.
52.IntroducingDroseraSurfin'Safari(http://webkit.org/
blog/61/introducingdrosera/).Webkit.org.28dejuniode
2006.Consultadoel19demayode2009.

Bibliografa
Flanagan,DavidFerguson,Paula(2002).JavaScript:TheDefinitiveGuide(4.edicin).ISBN0596000480.

Enlacesexternos
MozillaDeveloperCenter(https://developer.mozilla.org/es/docs/Web/JavaScript)
https://es.wikipedia.org/wiki/JavaScript

13/14

9/9/2016

JavaScript - Wikipedia, la enciclopedia libre

slice()O'ReillyAnswers(http://answers.oreilly.com/topic/2043sliceJavaScript/)(eningls)
Distincinentrevariableslocalesyglobales(http://social.msdn.microsoft.com/Forums/esES/webdeves/thre
ad/941b9a1d39bd454abf35eaef764df7be/)
Javascripttutorial(http://www.w3schools.com/js/)
Obtenidodehttps://es.wikipedia.org/w/index.php?title=JavaScript&oldid=92434588
Categoras:
Lenguajesinterpretados JavaScript Lenguajesdeprogramacinorientadaaobjetos
Lenguajesdeprogramacinbasadosenprototipos
Estapginafuemodificadaporltimavezel22jul2016alas05:00.
EltextoestdisponiblebajolaLicenciaCreativeCommonsAtribucinCompartirIgual3.0podranser
aplicablesclusulasadicionales.Alusarestesitio,ustedaceptanuestrostrminosdeusoynuestrapoltica
deprivacidad.
WikipediaesunamarcaregistradadelaFundacinWikimedia,Inc.,unaorganizacinsinnimodelucro.

https://es.wikipedia.org/wiki/JavaScript

14/14

You might also like