Para preguntas sobre la programación en ECMAScript (JavaScript / JS) y sus diversos dialectos / implementaciones (excepto ActionScript). Incluya todas las etiquetas relevantes en su pregunta; por ejemplo, [node.js], [jquery], [json], etc.

JavaScript(un dialecto de ECMAScript) es un alto nivel, dinámico, multi-paradigma, orientado a objetos, lenguaje basado en prototipos, de tipo débil e interpretado, utilizado tradicionalmente para las secuencias de comandos del lado del cliente en los navegadores web. JavaScript también se puede ejecutar fuera del navegador con el uso de un marco como Node.js, Nashorn, Wakanda o Google Apps Script. A pesar del nombre, no está relacionado con el lenguaje de programación Javay solo comparte similitudes superficiales.

Nota: A menos que también se incluya una etiqueta para un marco o biblioteca, se espera una respuesta de JavaScript puro para las preguntas con la etiqueta javascript.

JavaScript se ejecuta en casi todos los sistemas operativos y se incluye un motor en los principales navegadores web. Desarrollado en 1995 por Brendan Eichen Netscape Communications, originalmente se llamaba LiveScriptpero cambió su nombre a JavaScript debido a la relación amistosa de Netscape con Sun Microsystems(creadores de Java) en ese momento.

También hay disponibles motores o intérpretes independientes de JavaScript, que incluyen:

  • Spidermonkey de Mozilla, el primer motor de JavaScript que se haya escrito, utilizado actualmente en Mozilla Firefox.
  • El motor JavaScript de Google, Chrome V8, utilizado en Google Chrome y Chromium.
  • Google Apps Script, un intérprete basado en la nube / del lado del servidor que proporciona un control programático "macro" de los servicios y documentos de Google Apps.
  • Node.js, creado sobre V8, una plataforma que permite que las aplicaciones del lado del servidor se escriban en JavaScript.
  • Windows incluye JScript, una variante de JavaScript en Windows Script Host.
  • Chakra, una bifurcación de JScript, es desarrollado por Microsoft y utilizado en Edge.
  • Mozilla también ofrece Rhino, implementación de Java Java incorporado, típicamente integrado en aplicaciones Java para proporcionar secuencias de comandos a los usuarios finales.
  • WebKit (excepto el proyecto Chromium) implementa el motor JavaScriptCore.
  • ActionScript (originalmente derivado de HyperTalk) ahora es un dialecto ECMAScript y utiliza muchas API ECMAScript.
  • Duktape Embeddable, un motor ECMAScript portátil en C con una pequeña huella de memoria.
  • Wakanda, un marco, IDE y servidor construido en V8 que admite JavaScript del lado del servidor
  • Meteor: una aplicación Meteor es una combinación de JavaScript del lado del cliente que se ejecuta dentro de un navegador web o aplicación móvil PhoneGap, JavaScript del lado del servidor que se ejecuta en el servidor Meteor dentro de un contenedor Node.js. (de acuerdo con documentación de MeteorJS)
  • Nashorn, un motor de JavaScript desarrollado en el lenguaje de programación Java, basado en la máquina Da Vinci (JSR 292)

La Mozilla Developer Networkcontiene documentación en JavaScript.

JavaScript se usa normalmente para manipular el Modelo de objetos de documento(DOM) y Hojas de estilo en cascada(CSS) dentro del navegador. Esto permite secuencias de comandos de interfaz de usuario, animación, automatización, validación del lado del cliente y mucho más.

Con la reciente aparición de plataformas como Node.js, JavaScript ahora se puede utilizar para escribir aplicaciones del lado del servidor. Además, también se usa en entornos que no están basados en la web, como documentos PDF, navegadores específicos del sitio, widgets de escritorio, etc.

Nomenclatura

Aunque se desarrolló bajo el nombre de Mocha, el lenguaje se llamó oficialmente LiveScript cuando se lanzó por primera vez en las versiones beta de Netscape Navigator 2.0 en septiembre de 1995, pero se cambió el nombre de JavaScript cuando se implementó en el navegador Netscape versión 2.0B3.

El cambio de nombre de LiveScript a JavaScript coincidió aproximadamente con Netscape agregando soporte para la tecnología Java en su navegador web Netscape Navigator. La elección final del nombre causó confusión, dando la impresión de que el lenguaje era un spin-off del lenguaje de programación Java, y la elección ha sido caracterizada como una estratagema de marketing por Netscape para darle a JavaScript el prestigio de lo que entonces era el nuevo y caliente lenguaje de programación web.

La gente a menudo usa el término JavaScript de manera informal. El idioma y el término se originaron en Netscape. ECMAScript, JavaScript y JScript son términos que son fáciles de confundir.

ECMAScriptse desarrolló como una estandarización de Netscape JavaScripty el JScriptdesarrollado de forma independiente por Microsoft. La referencia canónica es la Especificación de idioma ECMAScript® 2015. Si bien JavaScript y JScript pretenden ser compatibles con ECMAScript, también proporcionan características adicionales (y otras desviaciones) no se describe en las especificaciones de ECMA. También existen otras implementacionesde ECMAScript.

Las diferencias actuales para quienes usan JavaScript son insignificantes; la gente generalmente no distingue las variaciones de JavaScript y JScript de ECMAScript.

Versiones de ECMAScript

La mayoría de los navegadores modernos implementan JavaScript basado en la especificación ECMAScript 6, aunque algunos no implementan algunas características de ES6. Sin embargo, los navegadores más antiguos como Internet Explorer 8 implementan la especificación ECMAScript 3, que no contiene funciones como Function.prototype.bind e incluso JSON.parse, entre otras. Para ver la compatibilidad actual del navegador con las funciones de ES6, consulte https://caniuse.com/#search=es6.

La versión actual de ECMAScript es ECMAScript 10, propiamente conocida como ECMAScript 2019, que se finalizó en junio de 2019.


Al hacer una pregunta de JavaScript, debe:

  1. Depura tu código JavaScript (consulta Creativebloq, MDN, Google < / a>, & MSDN).
  2. Aísle el código problemático y reprodúzcalo en un Fragmento de código de desbordamiento de pilao un entorno en línea externo como JSFiddle, JS Bino PasteBin(recuerde también incluir el código en la pregunta).
  3. Si se utiliza una biblioteca o un marco, etiquete la pregunta con las etiquetas apropiadas: jquerypara jQuery, prototypejspara Prototype, mootoolspara MooTools, y así sucesivamente. Sin embargo, si un marco no se usa o no es necesario, no incluya estas etiquetas.
  4. Si el problema es del lado del cliente, mencione en qué navegador está teniendo problemas el código y qué mensajes de error, si alguno, arrojó el navegador. Use las Herramientas para desarrolladores de su navegador (consulte "Herramientas útiles" a continuación) para ver estos mensajes. Si la pregunta es específica del navegador, use las etiquetas firefox, google-chrome, internet-explorer, opera, safari, microsoft-edge, opera-minietc.
  5. Solo etiquete la pregunta como csso htmlsi está preguntando sobre un problema relacionado con la combinación de uno de esos con JavaScript y solo se pudo responder con información específica sobre cualquiera de esos temas.

Aprendiendo JavaScript

Seguridad

JavaScript y el DOM brindan la posibilidad de que los autores malintencionados entreguen scripts para que se ejecuten en una computadora cliente a través de la Web. Los autores del navegador contienen este riesgo usando dos restricciones. Primero, los scripts se ejecutan en un entorno limitado en el que solo pueden realizar acciones relacionadas con la web, no tareas de programación de propósito general como la creación de archivos. En segundo lugar, los scripts están restringidos por la política del mismo origen: los scripts de un sitio web no tienen acceso a información como nombres de usuario, contraseñas o cookies enviados a otro sitio. La mayoría de los errores de seguridad relacionados con JavaScript son infracciones de la misma política de origen o del entorno limitado.

La Política de seguridad de contenido es el principal método previsto para garantizar que solo se ejecute código de confianza en una página web.

XSS es un tipo frecuente de intentar robar datos o dañar un sitio web a través de JavaScript.

Herramientas útiles

Aprendizaje interactivo de JavaScript

  • Codecademy | JavaScript: aprenda los fundamentos de JavaScript y la programación dinámica.
  • Udacity | Lenguajes de programación: Los conceptos clave incluyen especificar y procesar cadenas, oraciones y estructuras de programa válidas.
  • Code School: aprenda los fundamentos de JavaScript y la programación dinámica.
  • Khan Academy: Lo mejor es aprender sobre animaciones.
  • Codewars: aprenda patrones y entrene en cuestionarios publicados por miembros de la comunidad

Sabiduría del desbordamiento de pila

Enlaces útiles

Libros de programación de JavaScript gratuitos

Videos


Ejemplo de código JavaScript

Este script muestra "Hello World" en su pantalla.

window.onload = function() {
   alert('Hello World!');
};

¡Manifestación!


Preguntas frecuentes

Encuentre algunas respuestas a algunas de las preguntas más frecuentes sobre JavaScript y la tecnología relacionada a continuación.

P: Tengo esta estructura JSON, ¿cómo puedo acceder a la propiedad x.y.z?
A: ¿Cómo puedo acceder y procesar anidados? objetos, matrices o JSON?

P: Estoy agregando eventos en un ciclo for pero todos los controladores hacen lo mismo, ¿por qué?
A: Cierre de JavaScript dentro de bucles - ejemplo práctico simple

P: Quiero comparar algo con valores múltiples, ¿hay alguna manera fácil de hacerlo?
A: Forma concisa de comparar contra valores múltiples

P: ¿Cómo configurar una herencia adecuada?
A: Los objetos no heredan funciones prototipadas

P: ¿Cómo funcionan los cierres de JavaScript?
A: ¿Cómo funcionan los cierres de JavaScript?

P: ¿Por qué setTimeout() dentro de un bucle for siempre usa el último valor?
A: setTimeout in for -loop no imprime valores consecutivos

P: ¿Cómo devolver la respuesta de una llamada AJAX desde una función?
A: ¿Cómo devuelvo la respuesta de una llamada asincrónica?

P: ¿Por qué mis controladores conectados en un bucle no funcionan correctamente y qué puedo hacer al respecto?
A: Javascript: generar manejador dinámico

P: ¿Cómo puedo obtener valores de cadena de consulta?
A: ¿Cómo puedo obtener valores de cadena de consulta en JavaScript?

P: ¿Qué hace use strict en JavaScript?
A: ¿Qué hace el" uso estricto "en JavaScript y cuál es el razonamiento detrás de esto?

P: ¿Cómo puedo hacer una página de redireccionamiento en jQuery / JavaScript?
A: ¿Cómo redirecciono a otra página web?

P: ¿Cómo ordenar una matriz de objetos por un valor de propiedad?
A: Ordenar matriz de objetos por valor de propiedad de cadena

P: De una matriz de objetos, ¿cómo extraigo el valor de una propiedad como una matriz? R: De una matriz de objetos, extraer el valor de una propiedad como matriz

P: Estoy agregando elementos con JavaScript o jQuery en un punto posterior y agregando eventos pero no se están disparando, ¿por qué?
R: Es posible que desee delegación de eventos.

P: ¿Cómo puedo mantener solo los elementos de una matriz que coinciden con una determinada condición?
A: ¿Cómo puedo mantener solo los elementos de una matriz que coinciden con una determinada condición?

P: ¿Cómo puedo depurar mi código JavaScript?
A: ¿Cómo puedo ¿Depurar mi código JavaScript?

P: ¿Qué significa este símbolo en JavaScript?
A: ¿Qué hace? este símbolo significa en JavaScript?

Más información

Sala de chat