JavaScript

JavaScript

JavaScript

JavaScript ( JS ) es un equipo dinámico de lenguaje de programación . Se utiliza con mayor frecuencia como parte de los navegadores web , cuyas implementaciones permiten scripts del lado del cliente para interactuar con el usuario , controlar el navegador, se comunican de forma asíncrona , y alteran el contenido del documento que se muestra. También se está utilizando en la programación del lado del servidor, el desarrollo del juego y la creación de aplicaciones de escritorio y móviles.

JavaScript es un prototipo basado en lenguaje de script con dinámica escribir y tiene funciones de primera clase . Su sintaxis se vio influenciado por C . Copias de JavaScript muchos nombres y convenciones de nomenclatura de Java , pero los dos idiomas no están relacionados y tienen muy diferentes semántica. Los principios de diseño clave dentro de JavaScript se toman del mismo y Esquema de lenguajes de programación. Se trata de un multi-paradigma de lenguaje, apoyo orientado a objetos , imperativa y funcional programación estilos.

La aplicación de JavaScript en su uso fuera de las páginas web-por ejemplo, en PDF documentos, navegadores específicos del lugar y de escritorio de widgets también-es significativo. Más reciente y más rápido JavaScript máquinas virtuales y plataformas construidas sobre ellos (en particular Node.js ) también han aumentado la popularidad de JavaScript para el lado del servidor de aplicaciones web . En el cliente, JavaScript se puso en práctica tradicionalmente como interpreta el lenguaje, pero justo a tiempo de compilación se realiza ahora por los navegadores recientes (después de 2012).

JavaScript se formalizó en el ECMAScript lenguaje estándar y se utiliza principalmente como parte de un navegador web ( del lado del cliente JavaScript ). Esto permite programática acceso a los objetos dentro de un entorno de acogida.

No oficial logo JavaScript

Historia

Nacimiento en Netscape

JavaScript fue desarrollado originalmente por Brendan Eich , mientras trabajaba para Netscape Communications Corporation . Mientras lucha con Microsoft a través de Internet, Netscape considera su cliente-servidor que ofrece un sistema operativo distribuido, se ejecuta una versión portátil de Sun Microsystems Java. Debido a que Java era un competidor de C + + y dirigido a programadores profesionales, Netscape también quería un ligero lenguaje interpretado que complementaría Java apelando a los programadores no profesionales, como el de Microsoft Visual Basic (véase JavaScript y Java ).

A pesar de que fue desarrollado bajo el nombre de Mocha , el lenguaje se llama oficialmente LiveScript cuando se despachó por primera vez en las versiones beta de Netscape Navigator 2.0 en septiembre de 1995, pero fue retitulado JavaScript cuando se desplegó en la versión del navegador Netscape 2.0B3.

El cambio de nombre de LiveScript tener JavaScript o menos coincidió con Netscape añadiendo soporte para la tecnología Java en su Netscape Navigator navegador web. La elección final del nombre causó confusión, dando la impresión de que el idioma era un spin-off del lenguaje de programación Java , y la elección se ha caracterizado por muchos como una estrategia de marketing por Netscape para dar JavaScript el cachet de lo que entonces era el nuevo lenguaje de programación web caliente.

Hay una idea errónea de que el lenguaje JavaScript fue influenciado por C - (Se pronuncia "Ver-menos-menos"), una página web el lenguaje de scripting anteriormente desarrollado porNombas . Brendan Eich, sin embargo, Nunca había oído hablar de C -. antes de crear LiveScript Nombas plantamos su página web incorporado scripting para Netscape, aunque la página web de scripts no era un concepto nuevo, como lo demuestra ViolaWWW . Nombas más tarde cambió a ofrecer JavaScript en lugar de C - en su producto ScriptEase y formó parte del grupo TC39 que estandarizó ECMAScript .

JavaScript

application / javascript

text / javascript (obsoleto)

com.netscape.javascript-fuente

. Js

Del lado del servidor JavaScript

Netscape introdujo una implementación del lenguaje de scripting del lado del servidor (SSJS) con Netscape Enterprise Server , lanzado por primera vez en diciembre de 1994 (poco después de la liberación de JavaScript para navegadores). Desde mediados de la década de 2000, se ha producido una proliferación de lado del servidor implementaciones de JavaScript .Node.js es un ejemplo reciente notable de JavaScript del lado servidor que se utiliza en las aplicaciones del mundo real.

Tipo de formato

Desarrollos posteriores

Normalización

Adopción por Microsoft

En noviembre de 1996, Netscape anunció que había presentado JavaScript para Ecma International para su consideración como un estándar de la industria, y el trabajo posterior como resultado la versión estandarizada llamada ECMAScript . En junio de 1997, Ecma International publicó la primera edición de la ECMA-262 especificación . Un año después, en junio de 1998, se hicieron algunas modificaciones para adaptarlo a la norma ISO/IEC-16262, y la segunda edición fue liberado. La tercera edición de ECMA-262 fue publicado en diciembre de 1999.

El desarrollo de lo que habría sido una cuarta edición de la norma ECMAScript fue en última instancia, nunca se completó y ningún cuarta edición fue puesto en libertad. La quinta edición fue lanzada en diciembre de 2009. La edición actual de la norma ECMAScript es 5.1, lanzado en junio de 2011 .

JavaScript ganó muy rápidamente el éxito generalizado como un lenguaje de script del lado del cliente para las páginas web. Microsoft introdujo el soporte de JavaScript en su navegador web, Internet Explorer , en la versión 3.0, lanzado en agosto de 1996. servidor web de Microsoft , Internet Information Server , introdujo la compatibilidad con secuencias de comandos del lado del servidor en JavaScript con la versión 3.0 (1996). Microsoft comenzó a promover scripting página web utilizando el término general de HTML dinámico .

La implementación de Microsoft JavaScript tarde fue rebautizado JScript para evitar cuestiones de marcas. JScript añade nuevos métodos de fecha para fijar los Y2K métodos problemáticos en JavaScript, que se basa en Java java.util.Date clase.

JavaScript se ha convertido en uno de los lenguajes de programación más populares en la web. Inicialmente, sin embargo, muchos programadores profesionales denigraron el idioma, ya que su público objetivo consistía de los autores web y otros "amateurs", entre otras razones. La llegada de Ajax volvió JavaScript para el centro de atención y atrajo la atención de programación más profesional. El resultado fue una proliferación de amplios marcos y bibliotecas , la mejora de las prácticas de programación JavaScript, y un mayor uso de JavaScript fuera de los navegadores web, como se ve por la proliferación de JavaScript del lado servidor plataformas.

En enero de 2009, el CommonJS proyecto nace con el objetivo de especificar una biblioteca estándar común sobre todo para el desarrollo de JavaScript fuera del explorador.

Marcas

Hoy en día, "JavaScript" es una marca registrada de Oracle Corporation . Se utiliza bajo licencia para la tecnología inventada e implementada por Netscape Communications y entidades actuales, tales como la Fundación Mozilla .

Características

Las siguientes características son comunes a todos conformes implementaciones ECMAScript, a menos que se especifique explícitamente lo contrario.

Imperativo y estructurado

JavaScript soporta gran parte de la programación estructurada sintaxis de C (por ejemplo, si las declaraciones, mientras que los bucles, interruptor de declaraciones, etc.) Una excepción parcial es examinando el alcance de : C-estilo de alcance de bloque no es compatible. En su lugar, JavaScript tiene funciones de alcance (aunque, de alcance autentificado letpalabra clave se añadió en JavaScript 1.7). Al igual que C, JavaScript hace una distinción entre las expresiones y declaraciones . Una de las diferencias sintácticas de C es la inserción automática de punto y coma , lo que permite que los puntos y comas que normalmente terminar sentencias que se omite.

Dinámica

Tipado dinámico

Al igual que en la mayoría de los lenguajes de scripting , los tipos se asocian con valores , no con las variables . Por ejemplo, una variable x puede ser obligado a un número, luego de rebote a una cadena . JavaScript soporta varias maneras de probar el tipo de un objeto, incluyendo la tipificación de pato .

Con base a Objetos

JavaScript es casi enteramente basada en objetos . JavaScript objetos son matrices asociativas , aumentados con los prototipos (ver abajo). Nombres de las propiedades del objeto son claves de cadena. Apoyan dos sintaxis equivalente: la notación de puntos ( obj.x = 10 ) y notación de corchetes ( obj ['x'] = 10 ). Propiedades y sus valores se pueden añadir, cambiar, o eliminar en tiempo de ejecución. La mayoría de las propiedades de un objeto (y los de su cadena de herencia de prototipo) se pueden enumerar utilizando un for ... inbucle. JavaScript tiene un pequeño número de objetos integrados tales como la función y Fecha .

En tiempo de evaluación

JavaScript incluye una eval función que puede ejecutar instrucciones proporcionadas en forma de cadenas en tiempo de ejecución.

DHTML permite a los lenguajes de script para cambiar las variables en el lenguaje de definición de una página web, que a su vez afecta a la apariencia y la función de otro modo "estático" contenido de la página HTML, después de que la página ha sido completamente cargado y durante el proceso de observación. Así, la característica dinámica del DHTML es la forma en que funciona mientras que una página se ve, no en su capacidad para generar una página única con cada carga de página.

Funcional

Funciones de primera clase

Funciones son de primera clase ; son los objetos mismos. Como tales, tienen propiedades y métodos, tales como . llamada () y . bind () . Un anidada función es una función definida dentro de otra función. Se crea cada vez que la función externa se invoca. Además, cada función creado forma un cierre léxico : el ámbito léxico de la función externa, incluyendo cualquier constantes, variables locales y valores de los argumentos, se convierte en parte del estado interno de cada objeto función interna, incluso después de la ejecución de la función externa concluye.

Basado en Prototype

Prototipos

JavaScript utiliza prototipos donde muchos otros lenguajes orientados a objetos usan clases de herencia . Es posible simular muchas características basadas en las clases con los prototipos en JavaScript.

Funciona como constructores de objetos

Funciones doble como constructores de objetos junto con su papel típico. Prefijar una llamada a la función con la nueva va a crear una instancia de un prototipo, heredar propiedades y métodos del constructor (incluidas las propiedades del objeto prototipo). ECMAScript 5 ofrece la Object.create método, que permite la creación explícita de una instancia sin forma automática heredando de la objeto prototipo (entornos mayores pueden asignar el prototipo hasta nula ). del constructor prototipo propiedad determina el objeto utilizado para el prototipo interno del nuevo objeto. Los nuevos métodos se pueden añadir mediante la modificación del prototipo del objeto que se utiliza como un constructor. Incorporadas en los constructores de JavaScript, como las de matriz o de objetos , también tienen prototipos que se pueden modificar. Si bien es posible modificar el objeto prototipo, en general se considera una mala práctica porque la mayoría de los objetos en JavaScript heredarán los métodos y propiedades del objeto prototipo y no podrán contar con el prototipo que se desea modificar.

Funciones como métodos

A diferencia de muchos lenguajes orientados a objetos, no hay distinción entre la definición de una función y un método de definición. Más bien, la distinción se produce durante la función de llamada; cuando una función se llama como un método de un objeto, de la función local esta palabra está ligada a ese objeto para la llamada.

Implícita y explícita Delegación

JavaScript es un lenguaje Delegación .

Funciona como Roles (Rasgos y mixins)

JavaScript soporta de forma nativa diversas implementaciones de función basada de clases, como patrones Rasgos y los Mixins . Tal función define un comportamiento adicional por al menos un método vinculado a la esta palabra clave dentro de su función de órgano . Un papel tiene entonces que ser delegada expresamente a través de llamadas o aplicar a los objetos que necesitan para ofrecer un comportamiento adicional que no se comparte a través de la cadena de prototipo.

Composición de objetos y herencia

Mientras que la delegación basada función explícita Qué cubre la composición en JavaScript, delegación implícita ya ocurre cada vez que la cadena de prototipo se acercó con el fin de, por ejemplo, encontrar un método que podría estar relacionada con, pero no está directamente propiedad de un objeto. Una vez que se encontró el método que se llama dentro del contexto de este objeto. Por lo tanto la herencia en JavaScript está cubierto por una delegación de automatismo que se enlaza a la propiedad prototype de funciones constructoras.

Varios

En tiempo de ejecución medio ambiente

JavaScript normalmente se basa en un entorno de tiempo de ejecución (por ejemplo, un navegador web ) para ofrecer objetos y métodos por los que los scripts pueden interactuar con el medio ambiente (por ejemplo, una página web DOM). También se basa en el entorno de tiempo de ejecución para proporcionar la capacidad de incluir / scripts de importación (por ejemplo, HTML <script> elementos). Esto no es una característica del lenguaje per se, pero es común en la mayoría de implementaciones de JavaScript.

Funciones variadic

Un número indefinido de parámetros se puede pasar a una función. La función se puede acceder a ellos a través de parámetros formales y también a través de los locales argumentosobjeto. variadic funciones también se pueden crear mediante el aplicar el método.

Matrices y objetos literales

Al igual que muchos lenguajes de script, matrices y objetos ( arrays asociativos en otros idiomas) cada uno puede ser creado con una sintaxis abreviada sucinta. De hecho, estosliterales forman la base de la JSON formato de datos.

Las expresiones regulares

JavaScript también soporta expresiones regulares de una manera similar a la de Perl , que proporcionan una sintaxis concisa y poderosa para la manipulación de texto que es más sofisticado que las funciones de cadena incorporadas.

Extensiones específicas del proveedor

JavaScript es manejada oficialmente por la Fundación Mozilla , y las nuevas características del lenguaje se añaden periódicamente. Sin embargo, sólo algunos motores de JavaScript apoyan estas nuevas características:

  • funciones getter y setter de propiedad (soportados por WebKit, Opera,ActionScript y Rhino)

  • condicionales captura cláusulas

  • protocolo de iteración (adoptado de Python )

  • someras generadores - corrutinas (adoptado de Python)

  • comprensiones de la matriz y las expresiones generadoras (adoptado de Python)

  • ámbito de bloque adecuado a través de la let palabra clave

  • matriz y objeto desestructuración (forma limitada de coincidencia de patrones )

  • las expresiones de función concisas ( función (args) expr )

  • ECMAScript para XML (E4X), una extensión que añade soporte XML nativo de ECMAScript

Sintaxis

sintaxis de JavaScript

A partir de 2011 , la última versión de la lengua es JavaScript 1.8.5. Es un superconjunto de ECMAScript (ECMA-262) edición 3. Extensiones al lenguaje, incluyendo parcial ECMAScript para XML (E4X) (ECMA-357) de soporte y características experimentales considerados para su inclusión en las futuras ediciones de ECMAScript, se documentan aquí.

Ejemplos sencillos

Variables en JavaScript se pueden definir utilizando la var palabra clave:

var x ; / / define la variable x, aunque no hay ningún valor asignado por defecto var y = 2 ; / / define la variable y y asigna el valor 2 a la misma

Tenga en cuenta los comentarios en el ejemplo anterior, los cuales fueron precedida con dos barras inclinadas .

Allí no se construye en I / O funcionalidad en JavaScript; el entorno de ejecución establece que. La especificación ECMAScript en la edición 5.1 menciona:

... De hecho, no existe ninguna disposición en esta especificación para la entrada de datos externos o de salida de los resultados calculados.

Sin embargo, la mayoría de los entornos de ejecución tienen una consola de objeto que se puede utilizar para imprimir la salida. Aquí es un minimalista programa Hello World :

. consola log ( "¡Hola, mundo!" ) ;

Un simple recursiva función:

función factorial ( n ) { si ( n === 0 ) { volver 1 ; } regreso n * factorial ( n - 1 ) ; }

Función anónima (o lambda) sintaxis y cierre de ejemplo:

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

Función variadic demostración ( argumentos es un especial de variables ).

var sum = función ( ) { var i , x = 0 ; para ( i = 0 ; i < argumentos. longitud ; + + i ) { x + = argumentos [ i ] ; } regreso x ; } suma ( 1 , 2 , 3 ) ; / / devuelve 6

Las expresiones de función invocada inmediatamente- permiten funciones pasen alrededor de las variables bajo sus propios cierres.

var v ; v = 1 ; var getValue = ( función ( v ) { retorno de función ( ) { retorno v ; } ; } ) ( v ) ; v = 2 ; getValue ( ) ; / / 1

Un ejemplo más avanzado

Este código de ejemplo muestra varias características de JavaScript.

/ * Calcula el mínimo común múltiplo (mcm) de dos números * / función LCMCalculator ( x , y ) { / / constructor función var checkInt = función ( x ) { / / función interna si ( x % 1 ! == 0 ) { arrojar nueva TypeError ( x + "no es un número entero" ) ; / / lanzar una excepción } regreso x ; } ; este . un = checkInt ( x ) / / punto y coma ^ ^ ^ ^ son opcionales, un salto de línea es suficiente este . b = checkInt ( y ) ; } / / El prototipo de instancias de objetos creados por el constructor . / / "prototipo" la propiedad de ese constructor . LCMCalculator prototipo = { / / objeto literal constructor : LCMCalculator , / / cuando la reasignación de un prototipo, ajuste el propiedad constructor apropiadamente gcd : la función ( ) { / / método que calcula el máximo común divisor / / algoritmo de Euclides: var a = Matemáticas . abs ( esto . una ) , b = Matemáticas . abs ( esto . b ) , t ; si ( un < b ) { Variables / / swaps t = b ; b = a ; a = t ; } mientras que ( b ==! 0 ) { t = b ; b = a % b , un = t ; } / / Sólo es necesario para calcular GCD una vez, por lo que "redefinir" este método. / / (En realidad no redefinición que está definido en la propia instancia, / / por lo que se refiere a este this.gcd "redefinición" en lugar de LCMCalculator.prototype.gcd.) / / También, "mcd" === "mcd", esta ['mcd'] === this.gcd esta [ 'mcd' ] = función ( ) { volver a ; } ; volver a ; } , / / nombres de propiedad del objeto se puede especificar mediante cadenas delimitadas por doble (") o (") comillas simples. lcm : la función ( ) { / / Los nombres de variables no choquen con las propiedades del objeto, por ejemplo | mcm | no | this.lcm |. / / no usar | this.a * this.b | para evitar problemas de precisión PF var lcm = esto . un / este . mcd ( ) * esta . b ; . / / Sólo necesitará calcular mcm una vez, por lo que "redefinir" este método esta . lcm = función ( ) { retorno lcm ; } ; retorno lcm ; } , toString : la función ( ) { retorno "LCMCalculator: a =" + este . un + ", b =" + presente . b ; } } ; / / Define la función de salida genérica; esta aplicación sólo funciona para la web / / Nota:. Mapa de Array () y forEach () se definen en JavaScript 1.6 . / / Se utilizan para demostrar la naturaleza funcional inherente de JavaScript [ [ 25 , 55 ] , [ 21 , 56 ] , [ 22 , 58 ] , [ 28 , 56 ] ] . mapa ( función ( par ) { / / array función de mapeo + literal volver nueva LCMCalculator ( par [ 0 ] , par [ 1 ] ) ; } ) . clase ( función ( a , b ) { / / un género con esta función comparativa volver . un lcm ( ) - . b lcm ( ) ; } ) . forEach ( función ( obj ) { salida ( obj + ", mcd =" + . obj mcd ( ) + ", lcm =" + . obj lcm ( ) ) ; } ) ;

La siguiente salida se debe mostrar en la ventana del navegador.

LCMCalculator: a = 28, b = 56, = 28 mcd, mcm = 56 LCMCalculator: a = 21, b = 56, mcd = 7, lcm = 168 LCMCalculator: a = 25, b = 55, mcd = 5, lcm = 275 LCMCalculator: a = 22, b = 58, mcd = 2, lcm = 638

El uso en páginas web

Ver también: motor de JavaScript y Ajax (programación)

El uso más común de JavaScript es escribir funciones que están incorporadas en o incluidos de HTML páginas y que interactúan con el Document Object Model (DOM) de la página. Algunos ejemplos sencillos de este uso son:

  • Cargando nuevo contenido de la página o enviar datos al servidor a través de AJAX sin recargar la página (por ejemplo, una red social puede permitir al usuario para enviar actualizaciones de estado sin salir de la página)

  • Animación de los elementos de página, desvaneciéndose en y por fuera, cambiar su tamaño, moverlos, etc

  • El contenido interactivo, por ejemplo, juegos y audio de juego y vídeo

  • Validación de los valores de entrada de un formulario web para asegurarse de que son aceptables antes de ser enviado al servidor.

  • La transmisión de información sobre los hábitos de lectura de los usuarios y las actividades de navegación a varios sitios web. Páginas Web con frecuencia hacen esto para el análisis web , seguimiento de anuncios , la personalización o para otros fines.

Dado que el código JavaScript puede ejecutar localmente en el navegador del usuario (en lugar de en un servidor remoto), el navegador puede responder a las acciones del usuario de forma rápida, por lo que una aplicación más sensible. Por otra parte, el código JavaScript puede detectar acciones de los usuarios que HTML solo no puede, como pulsaciones de teclas individuales. Las aplicaciones como Gmail se aprovechan de esto: la mayor parte de la lógica de la interfaz de usuario está escrito en JavaScript, y JavaScript despacha las solicitudes de información (tales como el contenido de un mensaje de correo electrónico) en el servidor. La tendencia más amplia de Ajax de programación explota de manera similar esta fuerza.

Un motor de JavaScript (también conocido como intérprete de JavaScript o implementación de JavaScript ) es un intérprete que interpreta JavaScript código fuente y ejecuta la secuencia de comandos en consecuencia. El primer motor de JavaScript fue creado por Brendan Eich en Netscape Communications Corporation , para el Netscape Navigator navegador web . El motor, de nombre en código SpiderMonkey , se implementa en C . Desde entonces ha sido actualizada (en JavaScript 1.5) para cumplir con ECMA-262 edición 3 La. Rhino motor, creado principalmente por Norris Boyd (antes de Netscape, ahora en Google) es una implementación de JavaScript en Java . Rhino, como SpiderMonkey, es ECMA-262 edición 3 compatible.

Un navegador web es, con mucho, el entorno de acogida más común para JavaScript. Navegadores web suelen crear "objetos de acogida" para representar el Document Object Model(DOM) en JavaScript. El servidor web es otro entorno de acogida común. Un servidor web con JavaScript típicamente exponer objetos host representan HTTP solicitud y respuesta, que un programa de JavaScript podría entonces interrogar y manipular para generar dinámicamente páginas web.

Debido a que JavaScript es el único lenguaje que los navegadores más populares comparten apoyo, se ha convertido en un idioma de destino para muchos marcos en otros idiomas, a pesar de que JavaScript no fue diseñado para ser un lenguaje de este tipo. A pesar de las limitaciones de rendimiento inherentes a su naturaleza dinámica, la creciente velocidad de los motores de JavaScript ha hecho de la lengua un objetivo compilación sorprendentemente factible.

Script de ejemplo

A continuación se muestra un ejemplo mínimo de una página web que contiene normas conformes a JavaScript (usando HTML 5 sintaxis) y el DOM :

<! DOCTYPE html> < meta charset = "UTF-8" > < título > Minimal Ejemplo < / titulo > < h1 Identificación = "cabecera" > Esta es JavaScript < / h1 > < script de > document.body.appendChild (document.createTextNode ('Hello World!')); var h1 = document.getElementById ('header'); / / Contiene una referencia a la < h1 > tag h1 = document.getElementsByTagName ('h1') [0]; / / El acceso a la misma < h1 > elemento < / escritura > < noscript > Tu navegador no soporta JavaScript o lo tiene deshabilitado. < / noscript >

Consideraciones sobre compatibilidad

interoperabilidad Web

Debido a que JavaScript se ejecuta en entornos muy variados, una parte importante de las pruebas y la depuración es probar y verificar que el JavaScript funciona a través de múltiples navegadores.

Las interfaces DOM para manipular páginas web no son parte del estándar ECMAScript, o de la propia JavaScript. Oficialmente, las interfaces DOM se definen por un esfuerzo de estandarización independiente por el W3C ; en la práctica, las implementaciones de navegador difieren de las normas y el uno del otro, y no todos los navegadores ejecutar JavaScript.

Para hacer frente a estas diferencias, los autores de JavaScript pueden intentar escribir código compatible con los estándares que también se ejecuta correctamente por la mayoría de los navegadores; en su defecto, se puede escribir código que comprueba la presencia de ciertas funciones del navegador y se comporta de manera diferente si no están disponibles. En algunos casos, los dos navegadores pueden implementar tanto una característica pero con un comportamiento diferente, y los autores pueden considerar práctico para detectar qué navegador se está ejecutando y cambiar el comportamiento de su escritura para que coincida. Los programadores también pueden utilizar las bibliotecas o los kits de herramientas que tienen diferencias de navegador en cuenta.

Por otra parte, los scripts pueden no funcionar para algunos usuarios. Por ejemplo, un usuario puede:

  • usar un navegador es antiguo o raro con soporte DOM incompleto o inusual,

  • utilizar una PDA o teléfono móvil navegador que no puede ejecutar JavaScript

  • la ejecución de Javascript deshabilitado como precaución de seguridad,

  • utilizar un navegador de voz debido a, por ejemplo, una discapacidad visual.

Para apoyar a estos usuarios, los autores web pueden tratar de crear páginas que se degradan correctamente en los agentes de usuario (navegadores) que no soportan JavaScript de la página. En particular, la página debe permanecer utilizable aunque sin las características adicionales que habría añadido el JavaScript. Un enfoque alternativo que muchos encuentran preferible es al primer autor de contenido usando tecnologías de base que funcionan en todos los navegadores, y luego mejorar el contenido para los usuarios que tener Javascript activado. Esto se conoce como la mejora progresiva .

Accesibilidad

La accesibilidad web

Suponiendo que el usuario no ha deshabilitado su ejecución, web del lado del cliente JavaScript debe ser escrito para mejorar las experiencias de los visitantes con visuales o físicas discapacidades , y ciertamente debe evitar negar información a estos visitantes.

Los lectores de pantalla , utilizados por los ciegos y deficientes visuales , pueden ser conscientes JavaScript y así pueden acceder y leer la página DOM después de la secuencia de comandos se ha alterado. El código HTML debe ser lo más concisa, navegable y semánticamente rica como sea posible si los scripts se han quedado o no. JavaScript no debería ser totalmente dependiente de ratón o teclado eventos específicos debido a que un usuario puede ser físicamente incapaz de utilizar estos dispositivos de entrada. Por esta razón, eventos independiente del dispositivo, tales como onfocus y onchange son preferibles a los eventos centrada en el dispositivo tales como onmouseover y onkeypress en la mayoría de los casos.

JavaScript no deben utilizarse de una manera que es confusa o desorientar a cualquier usuario de la web. Por ejemplo, el uso de secuencias de comandos para modificar o desactivar la funcionalidad normal del navegador, como cambiando la forma en que el "back" o "refrescar" botones funcionan, es por lo general mejor evitar. Igualmente, desencadenando eventos que el usuario puede no tener en cuenta reduce la sensación del usuario de control como se hacen los cambios inesperados de secuencias de comandos en el contenido de la página.

A menudo, el proceso de elaboración de una página web compleja lo más accesible posible se convierte en un no trivial problema donde los temas se convierten en asuntos de debate y opinión, y donde son necesarios compromisos en el final. Sin embargo, los agentes de usuario y tecnologías de asistencia están en constante evolución y las nuevas directrices y la información pertinente, continuamente se publican en la web.

Seguridad

Ver también: Seguridad del explorador

JavaScript y el DOM proporcionan el potencial para que los autores maliciosos para entregar secuencias de comandos para ejecutar en un equipo cliente a través de la web. Autores de navegador contienen este riesgo utilizando dos restricciones. En primer lugar, los scripts se ejecutan en un recinto de seguridad en el que sólo pueden llevar a cabo acciones relacionadas con la web, no en tareas de programación de propósito general, como la creación de archivos. En segundo lugar, está limitada por la misma política de origen : Los scripts de un sitio web no tienen acceso a la información como nombres de usuario, contraseñas o cookies enviadas a otro sitio. La mayoría de los errores de seguridad relacionados con JavaScript son violaciones de cualquiera de los dos la misma política de origen o de la caja de arena.

Hay subgrupos de JavaScript generales - AdSafe, ECMA script Secure (SES) -. Que proporcionar una mayor nivel de seguridad, en especial en el código creado por terceros (tales como los anuncios)

Contenido Política de Seguridad es el principal método deseado de asegurar que sólo el código de confianza se ejecuta en una página web.

Ver también: Contenido Política de Seguridad

Vulnerabilidades de cross-site

Cross-site scripting y Cross-site request forgery

Un problema de seguridad relacionado con el JavaScript común es cross-site scripting o XSS, una violación de la política del mismo origen . Vulnerabilidades XSS ocurren cuando un atacante es capaz de causar un sitio web de destino, como un sitio web de banca en línea, para incluir un script malicioso en la página web se presenta a una víctima. La secuencia de comandos en este ejemplo a continuación, se puede acceder a la aplicación de banca con los privilegios de la víctima, lo que podría revelar información secreta o transferir dinero sin la autorización de la víctima. Una solución para las vulnerabilidades XSS es utilizar HTML escapar cuando la visualización de datos no confiables.

Algunos navegadores incluyen una protección parcial contra reflejadas ataques XSS, en el que el atacante proporciona una URL que incluye secuencias de comandos malintencionadas. Sin embargo, incluso los usuarios de estos navegadores son vulnerables a otros ataques XSS, como aquellos en los que se almacena el código malicioso en una base de datos. Sólo correcto diseño de las aplicaciones web a nivel de servidor puede prevenir totalmente XSS.

Vulnerabilidades XSS también pueden ocurrir debido a los errores de ejecución de los autores del navegador.

Otra vulnerabilidad cross-site es cross-site request forgery o CSRF. En CSRF, el código de un atacante en el sitio de los trucos del navegador de la víctima a tomar acciones que el usuario no tiene intención en un sitio diana (como la transferencia de dinero en un banco). Funciona porque, si el sitio de destino se basa sólo en las cookies para autenticar las solicitudes, a continuación, las peticiones iniciadas por código de sitio del atacante llevará las mismas credenciales de acceso legítimos como solicitudes iniciadas por el usuario. En general, la solución a CSRF es requerir un valor de autenticación en un campo de formulario oculto, y no sólo en las cookies, para autenticar cualquier petición que pueda tener efectos duraderos. Comprobación de la cabecera HTTP Referrer también puede ayudar.

"JavaScript secuestro" es un tipo de ataque CSRF en el que una etiqueta <script> en el sitio de un atacante explota una página en el sitio de la víctima que devuelve información privada, como JSON o JavaScript. Las soluciones posibles son:

  • que requiere un token de autenticación en el POSTE y GET parámetros para cualquier respuesta que devuelve la información privada

  • usando POST y GET nunca para las peticiones que devuelven información privada

Confianza fuera de lugar en el cliente

Los desarrolladores de aplicaciones cliente-servidor deben reconocer que los clientes no son de confianza pueden estar bajo el control de los atacantes. El autor de la aplicación no puede asumir que su código JavaScript se ejecutará según lo previsto (o en absoluto) porque cualquier secreto incrustado en el código podría ser extraído por un adversario determinado. Algunas sugerencias son:

  • Autores de sitios Web no pueden ocultar perfectamente cómo opera su JavaScript ya que el código fuente de crudo debe ser enviado al cliente. El código puede ser ofuscado , pero la ofuscación puede ser de ingeniería inversa.

  • JavaScript validación de formularios sólo proporciona comodidad para los usuarios, no de seguridad. Si un sitio verifica que el usuario accedió a sus términos de servicio, o los filtros de caracteres no válidos fuera de los campos que sólo debe contener los números, debe hacerlo en el servidor, no sólo el cliente.

  • Scripts se pueden desactivar de forma selectiva, de manera JavaScript no puede ser invocada para prevenir operaciones como hacer clic derecho sobre una imagen para guardarla.

  • Es muy mala práctica de integrar la información confidencial, como contraseñas de JavaScript, ya que puede ser extraída por un atacante.

Errores del navegador y el plugin de codificación

JavaScript proporciona una interfaz con una amplia gama de capacidades del navegador, algunos de los cuales pueden tener defectos tales como desbordamientos de búfer . Estos defectos pueden permitir a un atacante para escribir secuencias de comandos que pueda redundar en cualquier código que quieran en el sistema del usuario. Este código no es de ninguna manera se limita a otra aplicación JavaScript. Por ejemplo, un desbordamiento de búfer exploit puede permitir a un atacante obtener acceso a la API del sistema operativo con privilegios de superusuario.

Estas fallas han afectado a los principales navegadores como Firefox, Internet Explorer, y Safari.

Plugins, tales como reproductores de vídeo, Adobe Flash , y la amplia gama de ActiveX controles habilitados de forma predeterminada en Microsoft Internet Explorer, también pueden tener fallas explotables a través de JavaScript (tales defectos han sido explotadas en el pasado).

En Windows Vista, Microsoft ha tratado de contener los riesgos de errores, tales como desbordamientos de búfer mediante la ejecución del proceso de Internet Explorer con privilegios limitados. Google Chrome limita de manera similar sus páginas extracción de grasas a su propia "caja de arena".

Errores de implementación Sandbox

Navegadores Web son capaces de ejecutar JavaScript fuera de la caja de arena, con los privilegios necesarios para, por ejemplo, crear o eliminar archivos. Por supuesto, este tipo de privilegios que no están destinados a ser otorgado a codificar desde la web.

Conceder incorrectamente privilegios a JavaScript desde la web ha desempeñado un papel en las vulnerabilidades tanto en Internet Explorer y Firefox. En Windows XP Service Pack 2, Microsoft degradado privilegios de JScript en Internet Explorer.

Microsoft Windows permite que los archivos de código de JavaScript en el disco duro de una computadora para ser lanzados como de uso general, los programas no de espacio aislado (véase: Windows Script Host ). Esto hace a JavaScript (como VBScript ) un vector teóricamente viable para un caballo de Troya , aunque los caballos de Troya JavaScript son infrecuentes en la práctica.

Utiliza las páginas web externas

Además de los navegadores web y servidores, intérpretes de JavaScript están incrustados en un número de herramientas. Cada una de estas aplicaciones proporciona su propio modelo de objetos que permite el acceso al entorno de acogida. El núcleo del lenguaje JavaScript sigue siendo prácticamente el mismo en cada aplicación.

Lenguaje de script embebido

  • De Google Chrome extensiones, Opera extensiones 's, de Apple Safari 5 extensiones, de Apple Dashboard Reproductores , de Microsoft Gadgets , Yahoo! Reproductores , Google Desktop Gadgets y Serence Klipfolio se implementan utilizando JavaScript.

  • De Adobe Acrobat y Adobe Reader soporta JavaScript en PDF archivos.

  • Utilidades de la Adobe Creative Suite , que incluye Photoshop , Illustrator , Dreamweaver , y InDesign , permiten scripting a través de JavaScript.

  • OpenOffice.org , una suite de aplicaciones de oficina, permite Javascript para ser utilizado como un lenguaje de script.

  • El software de procesamiento de la señal de música interactiva Max / MSP publicado por Cycling '74, ofrece un modelo de JavaScript de su entorno para su uso por los desarrolladores.Permite un control mucho más preciso que el modelo de programación de interfaz gráfica de usuario centrada en default.

  • De Apple Logic Pro X estación de trabajo de audio digital de software (DAW) puede crear efectos personalizados MIDI plugins usando JavaScript.

  • ECMAScript se incluyó en el VRML estándar 97 para los nodos de secuencias de comandos de los archivos de descripción de escena VRML.

  • Esfera es un programa informático de código abierto y multiplataforma diseñado principalmente para hacer que los juegos de rol que utilizan JavaScript como lenguaje de scripting.

  • El código abierto Re-Animator marco permite el desarrollo de juegos basados ​​en sprites 2D usando JavaScript y XML.

  • La Unidad motor de juego es compatible con una versión modificada de JavaScript para secuencias de comandos a través de Mono.

  • DX Studio (motor 3D) utiliza la SpiderMonkey ejecución de JavaScript para el juego y la simulación lógica.

  • Google Apps Guión en Google Spreadsheets y Google Sites permite a los usuarios crear fórmulas personalizadas, automatizar tareas repetitivas y también interactúan con otros productos de Google, como Gmail. [ 81 ]

  • Muchos clientes de IRC , como ChatZilla o XChat , utilizan JavaScript para sus capacidades de scripting.

  • Productos SpinetiX utilizan el SpiderMonkey motor de JavaScript para permitir scripting en archivos SVG para crear proyectos de señalización digital.

  • Partido Nube mundo virtual utiliza una versión limitada de JavaScript / ECMAScript 5 como en el mundo lenguaje de scripting.

Motor de secuencias de comandos

  • De Microsoft Active Scripting tecnología soporta JScript como lenguaje de scripting.

  • El lenguaje de programación Java introdujo el javax.script paquete en la versión 6, que incluye una implementación de JavaScript basado en Mozilla Rhino . Así, las aplicaciones Java pueden alojar scripts que acceden a las variables y los objetos de la aplicación, tanto como los scripts de acogida de los navegadores web que el acceso de una página web Document Object Model (DOM).

  • El Qt + + toolkit C incluye una QtScript módulo de interpretar JavaScript, análogo al de Java javax.script paquete.

  • JSDB (JavaScript para bases de datos) es una de código abierto JavaScript shell para Windows, Mac OS X, Linux y Unix, el cual se extiende el motor de JavaScript de Mozilla con el archivo, base de datos, correo electrónico y objetos de red.

  • jslibs es un código abierto de JavaScript shell para Windows y Linux que se extiende el motor de JavaScript de Mozilla . Tiene la capacidad para llamar a funciones en las bibliotecas de uso común como NSPR, SQLite, LibTomCrypt, OpenGL, OpenAL y librsvg.

  • Late Night Software JavaScript OSA (aka JavaScript para OSA, o JSOSA) es una alternativa gratuita a AppleScript para Mac OS X. Se basa en la aplicación Mozilla 1.5 JavaScript, con la adición de un MacOS objeto para la interacción con el sistema operativo y el tercero fabricantes de aplicaciones.

Plataforma de aplicaciones

  • ActionScript , el lenguaje de programación utilizado en Adobe Flash , es otra implementación del estándar ECMAScript.

  • Adobe Integrated Runtime es un tiempo de ejecución de JavaScript que permite a los desarrolladores crear aplicaciones de escritorio.

  • CA, Inc. AutoShell entorno de programación entre aplicaciones 's se basa en la SpiderMonkey motor de Javascript. Contiene preprocesador extensiones como para la definición del sistema, así como clases personalizadas para diversas tareas relacionadas con el sistema de archivos como el I / O, la invocación de comandos del sistema de operación y el redireccionamiento, y scripting COM.

  • GNOME Shell , la cáscara para el GNOME 3 entorno de escritorio, hizo JavaScript de su lenguaje de programación predeterminado en 2013.

  • El Mozilla plataforma, que subyace en Firefox , Thunderbird , y algunos otros navegadores web, utiliza JavaScript para implementar la interfaz gráfica de usuario (GUI) de sus diversos productos.

  • myNFC es un marco basado en JavaScript que permite a los desarrolladores crear aplicaciones para teléfonos inteligentes.

  • Qt Quick 's lenguaje de marcas (disponible desde Qt 4.7) utiliza JavaScript para la lógica de la aplicación. Su sintaxis declarativa es también similar a JavaScript.

  • Letra de imprenta es un lenguaje de programación basado en JavaScript que añade soporte para opcional anotaciones de tipos y algunas otras extensiones de lenguaje tales como clases, interfaces y módulos. Un TS-script compila en llanura JavaScript y puede ejecutarse en cualquier host JS apoyo ECMAScript 3 o superior. El compilador es en sí misma por escrito a máquina.

  • Ubuntu Touch proporciona una API de JavaScript para la usabilidad de la interfaz unificada.

  • webOS utiliza el WebKit ejecución de JavaScript en su SDK para permitir a los desarrolladores crear aplicaciones independientes exclusivamente en JavaScript.

  • WinJS proporciona una biblioteca especial de Windows para la funcionalidad JavaScript en Windows 8 que permite el desarrollo de estilo moderno (anteriormente estilo Metro ) aplicaciones en HTML5 y JavaScript.

Las herramientas de desarrollo

En JavaScript, el acceso a un depurador vuelve invaluable en el desarrollo de programas grandes, que no son triviales. Dado que puede haber diferencias de implementación entre los diferentes navegadores (especialmente dentro del Document Object Model ), que es útil tener acceso a un depurador para cada uno de los navegadores que un destino de la aplicación web.

Depuradores de script están disponibles para Internet Explorer , Firefox , Safari , Google Chrome , Opera y Node.js

Tres depuradores están disponibles para Internet Explorer: Microsoft Visual Studio es el más rico de los tres, seguido de cerca por Microsoft Script Editor (un componente de Microsoft Office), y, finalmente, la libre Microsoft Script Debugger , que es mucho más básico que el otro dos. La libre Microsoft Visual Web Developer Express ofrece una versión limitada de la funcionalidad de depuración de JavaScript en Microsoft Visual Studio. Internet Explorer ha incluido herramientas de desarrollo desde la versión 8 (alcanzado con la tecla F12).

Aplicaciones web dentro de Firefox se pueden depurar utilizando el Firebug add-on, o la mayor Venkman depurador. Firefox también tiene un simple integrado Consola de errores, que registra y evalúa JavaScript. También registra CSS errores y advertencias.

Opera incluye un conjunto de herramientas llamado Dragonfly .

WebKit Inspector Web 's incluye un depurador de JavaScript, que se utiliza en Safari . Una versión modificada llamada Blink DevTools se utiliza en Google Chrome .

Node.js tiene nodo-inspector, un depurador interactivo que se integra con las DevTools Blink, disponibles en Google Chrome .

Algunos aparatos de depuración se a sí mismos escritos en JavaScript y construidos para funcionar en la Web. Un ejemplo es el programa JSLint , desarrollado por Douglas Crockford , quien ha escrito extensamente sobre el lenguaje. JSLint escanea el código de JavaScript para la conformidad con un conjunto de normas y directrices.

Historial de la versión

Ver también: ECMAScript § Dialectos y ECMAScript § Versión correspondencia

La siguiente tabla se basa en la información de múltiples fuentes.

Leyenda:

Versión antigua

Última versión

Críticas

Crítica de cualquier lenguaje de programación se centra principalmente en tres puntos fundamentales:

  • Errores de gestión

    1. Con qué facilidad qué el lenguaje permite la introducción de insectos?

    2. ¿Qué tan difícil son los errores para localizar o detectar?

    3. ¿Qué tan difícil son las correcciones de errores de implementar?

  • Código de seguridad y disciplina

    1. ¿Cuánto esfuerzo es en la disciplina programador? (Manual / ensayo)

    2. ¿Cuánto esfuerzo es el compilador? (Automatización)

    1. ¿Qué tan bien el lenguaje lograr la consumación de los factores de calidad (internos / externos)?

JavaScript es un lenguaje de programación relajado escrito (ver tipado dinámico arriba). Tipificación Loose coloca una responsabilidad mayor para la gestión de tipo estático, sobre la disciplina programador, muy poco en el compilador, y tardía notificación de violación de seguridad de tipo en el tiempo de ejecución. El resultado es un entorno de desarrollo donde los insectos de tipo pueden ser introducidas fácilmente debido a la falibilidad humana. Los errores pueden ser difíciles de detectar o puede pasar desapercibida por el tiempo de ejecución, por varias razones:

  • Errores no pueden ser detectadas debido al código de host no se ejerce.

  • Los insectos no pueden ser detectados por el código de host inalcanzable.

  • Los insectos no pueden ser detectados por no cumplir las reglas de negocio de gobierno, a pesar de que ha escrito correctamente técnicamente.

La crítica basada en la tipificación suelta entonces advierte a los programadores a ser conscientes de la necesidad de una mayor disciplina programador e impacto cronograma del proyecto debido a los errores detectados y no detectados tanto aumentan el tiempo de producción a un ritmo impredecible.

Lenguajes y características relacionados

JSON o JavaScript Object Notation, es un formato de intercambio de datos de uso general que se define como un subconjunto de la sintaxis literal de JavaScript.

jQuery es una biblioteca JavaScript popular diseñado para simplificar DOM scripting del lado del cliente HTML orientada.

Navegadores Mozilla soportan actualmente LiveConnect , una característica que permite a JavaScript y Java para comunicados entre sí en la web. Sin embargo, el apoyo Mozilla específico para LiveConnect está programado para ser eliminado en el futuro a favor de la transmisión de la manipulación a través de LiveConnect NPAPI al Java 1.6 + plug-in (todavía no está soportado en el Mac en marzo de 2010 ). La mayoría de las herramientas de inspección del navegador, como Firebug en Firefox, incluyen intérpretes de JavaScript que puede actuar sobre la página visible DOM.

asm.js es un subconjunto de JavaScript que se puede ejecutar en cualquier motor de JavaScript o correr más rápido en un futuro-de-tiempo (AOT) la compilación de motor.

Utilice como lengua intermedia

Como JavaScript es el lenguaje del lado del cliente con más soporte que puede ejecutarse dentro de un navegador web, se ha convertido en un lenguaje intermedio para otros idiomas para apuntar. Esto ha incluido los dos idiomas y los puertos de las lenguas existentes de nueva creación. Algunos de estos incluyen:

  • Objetivo-J , un superconjunto de JavaScript que compila a JavaScript estándar. Añade la herencia tradicional y Smalltalk / Objective-C estilo despacho dinámico y opcional a escribir pseudo-estática para JavaScript.

  • Processing.js , un puerto de JavaScript de Processing, un lenguaje de programación diseñado para escribir visualizaciones, imágenes y contenido interactivo. Permite a los navegadores web para mostrar animaciones, aplicaciones visuales, juegos y otros contenidos ricos gráfica sin necesidad de un applet de Java o Flash plugin.

  • CoffeeScript , una sintaxis alternativa para JavaScript intención de ser más conciso y legible. Se añade características como comprensiones de matriz (también disponibles en JavaScript desde la versión 1.7) y el patrón de las características determinadas. Al igual que en Objective-J, que se compila a JavaScript. Ruby y Python se han citado como influencia sobre la sintaxis CoffeeScript.

  • Google Web Toolkit traduce un subconjunto de Java a JavaScript.

  • Scala , un lenguaje de programación funcional y orientada a objetos, tiene un compilador experimental Scala-to-Javascript.

  • Pijamas , un puerto de Google Web Toolkit para Python (traduce un subconjunto de Python a JavaScript)

  • Dart , un lenguaje de programación de código abierto desarrollado por Google, puede ser compilado a JavaScript.

  • Whalesong, una raqueta compilador a JavaScript.

  • Emscripten , un LLVM -backend para portar bibliotecas nativas de JavaScript.

  • Fantom un lenguaje de programación que se ejecuta en la JVM,. NET y JavaScript.

  • Letra de imprenta , un lenguaje de programación libre y de código abierto desarrollado por Microsoft. Es un superconjunto de JavaScript, y esencialmente añade opcional tipos estáticos y programación basada en la clase orientada a objetos con el lenguaje.

  • Haxe , un lenguaje de programación multiplataforma de código abierto de alto nivel y el compilador que puede producir aplicaciones y código fuente para muchas plataformas diferentes, incluyendo JavaScript.

  • ClojureScript, un compilador para Clojure que se dirige JavaScript. Está diseñado para emitir código JavaScript que es compatible con el modo de compilación avanzada del compilador de optimización de Google cierre.

  • Kotlin , un tipo estático- lenguaje que también compila a código de bytes de Java .

JavaScript y Java

Un error común es que JavaScript es similar o estrechamente relacionados con Java . Es cierto que ambos tienen una sintaxis similar a C (el lenguaje C es su lengua ancestro común más inmediato). También están tanto típicamente sandboxed (cuando se utiliza dentro de un navegador), y JavaScript fue diseñado con la sintaxis de Java y la biblioteca estándar en mente. En particular, todas las palabras clave de Java fueron reservados en el original JavaScript biblioteca estándar de JavaScript sigue las convenciones de nomenclatura de Java, y Matemáticas y objetos Date de JavaScript se basan en clases de Java 1.0, pero las similitudes terminan ahí.

Las diferencias entre los dos idiomas son más prominentes que sus similitudes. Java tiene tipos estáticos , mientras que la tipificación de JavaScript es dinámica (es decir, una variable puede contener un objeto de cualquier tipo y no puede ser restringido). Java se carga desde el código de bytes compilado, mientras que JavaScript se carga como código fuente legible por humanos. Objetos de Java son basados ​​en la clase , mientras que de JavaScript son basado en prototipos . Por último, Java no apoyó la programación funcional hasta Java 8, mientras que JavaScript hace, ya que contiene muchas características basadas en el lenguaje Scheme .

Referencias

  1. ^ Ir a:un b Douglas Crockford . Douglas Crockford sobre Funcional JavaScript (flv) (hablar Tech). blinkx . El evento se produce a las 2:49. "[JavaScript] es también casualmente lenguaje de programación funcional más popular del mundo. JavaScript es y siempre ha sido, por lo menos desde [version] 1.2, un lenguaje de programación funcional." [ enlace roto ]

  2. Salta hacia arriba^ "Nuevo en JavaScript 1.8.5 | Mozilla Developer Network" . Developer.mozilla.org. 2012-11-18 . Consultado el 05/26/2013 .

  3. Salta hacia arriba^ "RFC 4329" . Apps.ietf.org . Consultado el 05/26/2013 .

  4. Salta hacia arriba^ ", declaró-System Tipo Uniforme Identificadores" . Mac OS X Reference Library . Apple Inc . Consultado el 2010-03-05 .

  5. ^ Ir a:un b Flanagan y Ferguson 2006 , p. 1.

  6. Salta hacia arriba^ "ECMAScript Language Overview" (PDF). 2007-10-23. p. 4 . Obtenido 2009-05-03 .

  7. Salta hacia arriba^ "ECMAScript Language Specification" .

  8. Salta hacia arriba^ The Little JavaScripter muestra la relación con el Esquema con más detalle.

  9. Salta hacia arriba^ Severance, Charles (febrero de 2012). "JavaScript: Diseño de un idioma en 10 días" . Computer (IEEE Computer Society) 45 (2):. 7-8 doi : 10.1109/MC.2012.57 . Consultado el 23 de marzo 2013.

  10. Salta hacia arriba^ Nota de prensa anunciando JavaScript "Netscape y Sun anuncian Javascript", PR Newswire, 04 de diciembre 1995

  11. Salta hacia arriba^ "TechVision: Innovadores de la Red: Brendan Eich y JavaScript" . Web.archive.org. Archivado desde el original en 2008-02-08.

  12. Salta hacia arriba^ "Lenguajes de programación utilizados en Internet y la World Wide Web (WWW)" . Webdevelopersnotes.com . Consultado el 2009-05-19 .

  13. Salta hacia arriba^ "O'Reilly - Safari Books Online - 0596101996 - JavaScript: The Definitive Guide, quinta edición" . Safari.oreilly.com . Consultado el 2009-05-19 .

  14. Salta hacia arriba^ "La historia de los lenguajes de programación - O'Reilly Media" . Oreilly.com . Consultado el 13/04/2014 .

  15. Salta hacia arriba^ "Historia de JavaScript © Brenkoweb" . Brenkoweb.com . Consultado el 13/04/2014 .

  16. Salta hacia arriba^ "¿Qué es JavaScript?" . media.wiley.com . Consultado el 21/04/2014 .

  17. Salta hacia arriba^ "Respuestas de Brent Noorda en ECMA" . Quora . Consultado el 13/04/2014 .

  18. Salta hacia arriba^ "Historia de Nombas" . Brent-noorda.com. 2010-06-24 . Consultado el 13/04/2014 .

  19. Salta hacia arriba^ "Nuevo JavaScript Engine propietario del módulo" . Brendan Eich. 2011-06-21 . Consultado el 13/04/2014 .

  20. Salta hacia arriba^ "Tech - JavaScript para Desarrolladores Web" . Read.uberflip.com . Consultado el 13/04/2014 .

  21. Salta hacia arriba^ "Capítulo 2: Primeros pasos" . Guía del lado del servidor JavaScript . Netscape Communications Corporation. 1998 . Consultado el 2012-04-25 .

  22. Salta hacia arriba^ Mike Morgan (1996). "Capítulo 6: Netscape Internet Application Framework" . Usando Netscape LiveWire ™ ™, edición especial . Que.

  23. Salta hacia arriba^ "del lado del servidor Javascript Back With a Vengeance" . Read Write Web . 17 de diciembre 2009 . Consultado el 28 de mayo 2012 .

  24. Ir arriba^ "El objetivo de nodo es proporcionar una manera fácil de construir programas de red escalables" . Acerca de Node.js . Joyent.

  25. ^ Ir a:un b Brendan Eich (3 de abril de 2008). "popularidad" . Consultado el 2012-01-19 .

  26. Salta hacia arriba^ "tercera especificación ECMAScript edición" (PDF) . Consultado el 05/26/2013 .

  27. Salta hacia arriba^ "Documentación" . ECMAScript . Consultado el 13/04/2014 .

  28. Salta hacia arriba^ "estándar ECMA-262" (PDF) . Consultado el 05/26/2013 .

  29. Salta hacia arriba^ "JavaScript: Mundial de las más incomprendidas Programming Language" . Crockford.com . Consultado el 2009-05-19 .

  30. Salta hacia arriba^ Kris Kowal (1 diciembre 2009). "esfuerzo CommonJS establece JavaScript en camino de dominar el mundo" . Ars Technica . Condé Nast Publications . Consultado el 18 de abril 2010 .

  31. Salta hacia arriba^ "USPTO copyright entrada # 75026640" . USPTO.

  32. Salta hacia arriba^ "Sun Marcas" . Sun Microsystems. Archivado desde el original on 28 May 2010 . Consultado el 2007-11-08 .

  33. Salta hacia arriba^ Flanagan y Ferguson 2006 , p. 16.

  34. Salta hacia arriba^ Flanagan y Ferguson 2006 , pp 176-178.

  35. Salta hacia arriba^ "Propiedades del objeto Function" . Es5.github.com . Consultado el 05/26/2013 .

  36. Salta hacia arriba^ Flanagan y Ferguson 2006 , p. 141.

  37. Salta hacia arriba^ "Herencia y la cadena de prototipo" . Mozilla Developer Network . Mozilla . Consultado el 06 de abril 2013 .

  38. Salta hacia arriba^ Herman, David (2013). Efectiva Javascript . Addison-Wesley. p. 83. ISBN 9780321812186 .

  39. Salta hacia arriba^ Haverbeke, Marjin (2011). Elocuente Javascript . No Starch Press. pp 95-97. ISBN 9781593272821 .

  40. Salta hacia arriba^ Katz, Yehuda. Prototipos "entendimiento" en "JavaScript" . Consultado el 06 de abril 2013 .

  41. Salta hacia arriba^ Herman, David (2013). Efectiva Javascript . Addison-Wesley. pp 125-127. ISBN 9780321812186 .

  42. Salta hacia arriba^ Los muchos talentos de JavaScript para la generalización de Papel Programación Orientada a enfoques como rasgos y mixins , 11 de abril de 2014.

  43. Salta hacia arriba^ Rasgos de Javascript , 2010.

  44. Salta hacia arriba^ CocktailJS - anotaciones. RASGOS. TALENTOS. , abril de 2013.

  45. Salta hacia arriba^ Angus Croll, Una nueva mirada a los Mixins de JavaScript , publicada el 31 de mayo de 2011.

  46. Salta hacia arriba^ Patrones Código JavaScript Reutilizar , 19 de abril de 2013.

  47. Salta hacia arriba^ Haverbeke, Marijn (2011). Elocuente JavaScript . No Starch Press. pp 139-149. ISBN 978 hasta 1593272821 .

  48. Salta hacia arriba^ Robert Nyman, captadores y definidores Con Javascript - ejemplos de código y Demos , publicado el 29 de mayo de 2009, consultado el 2 de enero de 2010.

  49. Ir arriba^ John Resig, JavaScript captadores y definidores , 18 de julio de 2007, acceso 02 de enero 2010

  50. Salta hacia arriba^ "MDN - sobre esa referencia" . Developer.mozilla.org. 2008-08-31 . Consultado el 2009-05-19 .

  51. Salta hacia arriba^ "var - Javascript - MDN" . La Red de Desarrolladores de Mozilla . Consultado el 22 de diciembre 2012 .

  52. Salta hacia arriba^ "Especificación ECMAScript Language - ECMA-262 Edition 5.1" . ECMA International . Consultado el 22 de diciembre 2012 .

  53. Salta hacia arriba^ "consola" . Mozilla Developer Network . Mozilla . Consultado el 06 de abril 2013 .

  54. Salta hacia arriba^ "argumentos" . Mozilla Developer Network . Mozilla . Consultado el 06 de abril 2013 .

  55. Salta hacia arriba^ "tracking Javascript - Piwik" . Piwik . Consultado el 31 de marzo 2012 .

  56. Salta hacia arriba^ Hamilton, Naomi (31/06/2008). "El AZ de Lenguajes de Programación: JavaScript" . computerworld.com.au.

  57. Salta hacia arriba^ Peter-Paul Koch, la detección de objetos

  58. Salta hacia arriba^ Peter-Paul Koch, Mission Impossible - posición del ratón

  59. Ir arriba^ Peter-Paul Koch, detectar Browser

  60. ^ Ir a:un b c Flanagan y Ferguson 2006 , pp 262-263.

  61. Salta hacia arriba^ "Creación Accesible JavaScript" . WebAIM . Consultado el 08 de junio 2010 .

  62. Salta hacia arriba^ "Hacer JavaScript Seguro para la publicidad" . AdSafe . Consultado el 05/26/2013 .

  63. Salta hacia arriba^ "Secure ECMA Script (SES)" . Code.google.com . Consultado el 05/26/2013 .

  64. Salta hacia arriba^ MozillaZine, Vulnerabilidad Mozilla Cross-Site Scripting reportado y fija

  65. Salta hacia arriba^ Haga clic en "protección"? Olvídate de eso . 2008-06-17. ISSN 1797-1993 . Consultado el 2008-06-17 .

  66. Salta hacia arriba^ Mozilla Corporation, Desbordamiento de búfer en crypto.signText ()

  67. Salta hacia arriba^ Paul Festa, CNet, bug de desbordamiento de búfer en Internet Explorer

  68. Salta hacia arriba^ SecurityTracker.com, Apple Safari JavaScript desbordamiento de búfer permite a los usuarios remotos ejecutar código arbitrario y redirección HTTP Bug permite a los usuarios remotos acceso Archivos

  69. Salta hacia arriba^ SecurityFocus, Microsoft WebViewFolderIcon ActiveX Control Desbordamiento de búfer

  70. Salta hacia arriba^ Autoridad Fusión, Macromedia Flash ActiveX Buffer Overflow

  71. Salta hacia arriba^ Mike Friedman, el modo protegido en Vista IE7

  72. Salta hacia arriba^ EE.UU. CERT, la Nota de Vulnerabilidad VU # 713878: Microsoft Internet Explorer no valida correctamente la fuente de marco redirigida

  73. Salta hacia arriba^ Fundación Mozilla, Mozilla Asesor de la Fundación de Seguridad 2005-41: Escalada de privilegios a través de modificaciones de propiedades de DOM

  74. Salta hacia arriba^ Microsoft Corporation, Cambios en la funcionalidad Microsoft Windows XP Service Pack 2: Parte 5: Seguridad de exploración mejorada

  75. Salta hacia arriba^ Para un ejemplo de una rara JavaScript Caballo de Troya, consulte Symantec Corporation, JS.Seeker.K

  76. Salta hacia arriba^ "JavaScript para Acrobat" . Consultado el 2009-08-18 .

  77. Salta hacia arriba^ Re-Animator , en Launchpad

  78. Salta hacia arriba^ "Unidad Scripting" . unity3d.com . Consultado el 29/01/2013 .

  79. Salta hacia arriba^ "Especificación técnica" . dxstudio.com . Consultado el 2009-10-20 .

  80. Salta hacia arriba^ PIENSE! The Maxwell Render Resourcer Center, Referencias de Scripting

  81. Salta hacia arriba^ Google Apps Script , Bienvenido a Google Apps Script

  82. Salta hacia arriba^ "ChatZilla Preguntas frecuentes -. 4.5 ¿Cómo puedo escribir guiones?" . Chatzilla.hacksrus.com . Consultado el 11 de febrero 2011 .

  83. Salta hacia arriba^ "http://unborn.ludost.net/xcdscript/" . Consultado el 11 de febrero 2011 .

  84. Salta hacia arriba^ "Javascript - SpinetiX Support Wiki" . SpinetiX . Consultado el 12 de diciembre 2012 .

  85. Salta hacia arriba^ "Scripting general - Party Nube Wiki" . Nube Parte, Inc . Obtenido 07 de enero 2013 .

  86. Salta hacia arriba^ "Información de la versión (JavaScript)" . Msdn.microsoft.com . Consultado el 05/26/2013 .

  87. Salta hacia arriba^ "notas de la versión javax.script" . Java.sun.com . Consultado el 2009-05-19 .

  88. Salta hacia arriba^ Flanagan y Ferguson 2006 , pp 214 y ss.

  89. Salta hacia arriba^ Nokia Corporation, Módulo QtScript

  90. Salta hacia arriba^ JSDB.org (Sitio web oficial)

  91. Salta hacia arriba^ jslibs en Google Code

  92. Salta hacia arriba^ Abrir Scripting Architecture

  93. Salta hacia arriba^ "Detrás de las escenas con Owen Taylor" . El Diario de GNOME . Consultado el 2010-01-23 .

  94. Salta hacia arriba^ "Responder a la pregunta:" ¿Cómo puedo desarrollar una aplicación para GNOME " " .

  95. Salta hacia arriba^ Categoría:. fundamentos de proyectos (05/22/2013) "myNFC.org" . myNFC.org . Consultado el 05/26/2013 .

  96. Salta hacia arriba^ "Depuración Avanzada Con JavaScript" . alistapart.com. 2009-02-03 . Consultado el 2010-05-28 .

  97. Salta hacia arriba^ "El JavaScript Depuración Console" . javascript.about.com. 2010-05-28 . Consultado el 2010-05-28 .

  98. Salta hacia arriba^ "SplineTech JavaScript Debugger - una organización independiente standalone JavaScript Debugger" . javascript-debugger.com. 08/26/2013 . Consultado el 08/26/2013 .

  99. Salta hacia arriba^ "Depuración con Nodo Inspector" . http://docs.strongloop.com/ . Consultado el 07/05/2014 .

  100. Salta hacia arriba^ desarrollo JScript en Microsoft Office 11 (MS InfoPath 2003)

  101. Salta hacia arriba^ "Opera Dragonfly" . Software Opera.

  102. Jump Up^ "La introducción de Drosera - Surfin 'Safari" . Webkit.org. 2006-06-28 . Consultado el 2009-05-19 .

  103. Salta hacia arriba^ "Javascript - JScript - ECMAScript historial de versiones" . Webmasterworld.com . Consultado el 2009-12-17 .

  104. Salta hacia arriba^ John Resig. "Versiones de JavaScript" . Ejohn.org . Consultado el 2009-05-19 .

  105. Salta hacia arriba^ "Información de la versión (JScript)" . Msdn.microsoft.com . Consultado el 2009-12-17 .

  106. Salta hacia arriba^ "La historia del navegador web Opera" .

  107. Salta hacia arriba^ "¿Qué versión de Javascript" .

  108. Salta hacia arriba^ Notas de la versión para Java ™ Plug-In Tecnología de próxima generación (introducido en Java SE 6 Update 10) . Java.sun.com. Consultado el 13/06/2013.

  109. Salta hacia arriba^ "Preguntas más frecuentes" . asm.js . Consultado el 13/04/2014 .

  110. Salta hacia arriba^ "Novedades en JavaScript 1.7" . Developer.mozilla.org. 12/05/2012 . Consultado el 05/26/2013 .

  111. Salta hacia arriba^ Sébastien Doeraene. "Scala.js" . Lampwww.epfl.ch . Consultado el 13/04/2014 .

  112. Salta hacia arriba^ "Whalesong: a Racket para compilador JavaScript" . Hashcollision.org . Consultado el 13/04/2014 .

  113. Salta hacia arriba^ "clojure / clojurescript · GitHub" . Github.com . Consultado el 13/04/2014 .

Para leer más

  • Bhangal, Sham; Jankowski, Tomasz (2003). Fundación de Diseño Web: HTML esencial, JavaScript, CSS, Photoshop, Fireworks y Flash . APulse LP ISBN 1-59059-152-6 .

  • Burns, Joe; Growney, Andrea S. (2001). extras de JavaScript . Pearson Education. ISBN 0-7897-2612-2 .

  • Duffy, Scott (2003). Cómo hacer todo con JavaScript . Osborne. ISBN 0-07-222887-3 .

  • Zakas, Nicholas C. (2012). Profesional JavaScript para desarrolladores web (3 ª ed.). Wrox. ISBN 978-1-1180-2669-4 .

  • Flanagan, David; . Ferguson, Paula (2006) JavaScript: The Definitive Guide . (. 5 ª ed) O'Reilly & Associates . ISBN 0-596-10199-6 .

  • Goodman, Danny; Eich, Brendan (2001). Biblia JavaScript . John Wiley & Sons. ISBN 0-7645-3342-8 .

  • Goodman, Danny; Markel, Scott (2003). JavaScript y DHTML Cookbook . O'Reilly & Associates.ISBN 0-596-00467-2 .

  • Harris, Andy (2001). Programación de JavaScript para el principiante absoluto . Premier Press.ISBN 0-7615-3410-5 .

  • Haverbeke, Marijn (2011). Elocuente JavaScript . No Starch Press. ISBN 978-1593272821 .

  • Heinle, Nick; Koman, Richard (1997). Proyectos con JavaScript . O'Reilly & Associates. ISBN 1-56592-300-6 .

  • McDuffie, Tina España (2003). Conceptos y Técnicas de JavaScript: Programación de Sitios Web Interactivos . Franklin, Beedle & Associates. ISBN 1-887902-69-4 .

  • McFarlane, Nigel (2003). Desarrollo rápido de aplicaciones con Mozilla . Referencias Prentice Hall Profesional Técnicas. ISBN 0-13-142343-6 .

  • Powell, Thomas A.; . Schneider, Fritz (2001) JavaScript: The Complete Reference . McGraw-Hill Companies. ISBN 0-07-219127-9 .

  • Shelly, Gary B.; Cashman, Thomas J.; Dorin, William J.; Quasney, Jeffrey J. (2000). JavaScript: Conceptos y Técnicas Completas . Cambridge: Course Technology. ISBN 0-7895-6233-2 .

  • Vander Veer, Emily A. (2004). JavaScript For Dummies (4 ª ed.). Wiley Pub. ISBN 0-7645-7659-3.

  • Watt, Andrew H.; Watt, Jonathan A.; Simon, Jinjer L. (2002). Aprendiendo JavaScript en 21 días .Pearson Education. ISBN 0-672-32297-8 .

Enlaces externos

Escuche este artículo ( info / dl )

Wikimedia Commons alberga contenido multimedia sobreJavaScript .

Wikiversidad ha materiales de aprendizaje sobre Tema: JavaScript

Wikilibros tiene más información sobre el tema de: JavaScript

Este archivo de audio fue creado de una revisión del " JavaScript artículo "de fecha 08/20/2013, y no refleja subsecuente corrige al artículo. ( Audio ayuda )

Artículos hablados

0:00

MENÚ