JavaScript fue creado inicialmente para «dar vida a las páginas web». Los programas en este lenguaje se llaman scripts. Pueden escribirse directamente en el HTML de una página web y ejecutarse automáticamente a medida que la página se carga. Los scripts son proporcionados y ejecutados como texto plano. No necesitan preparación o compilación especial para ejecutarse. En este aspecto, JavaScript es muy diferente de otro lenguaje llamado Java.
Hoy en día, JavaScript puede ejecutarse no sólo en el navegador, sino también en el servidor, o en realidad en cualquier dispositivo que tenga un programa especial llamado el motor de JavaScript. El navegador tiene un motor incorporado a veces llamado «máquina virtual de JavaScript».
¿Por qué se llama JavaScript?
Cuando se creó JavaScript, inicialmente tenía otro nombre: «LiveScript». Pero Java era muy popular en ese momento, así que se decidió que posicionar un nuevo lenguaje como «hermano menor» de Java ayudaría.
Pero a medida que evolucionó, JavaScript se convirtió en un lenguaje totalmente independiente con su propia especificación llamada ECMAScript, y ahora no tiene ninguna relación con Java.
Diferentes motores tienen diferentes «nombres en clave». Por ejemplo:
- V8 – en Chrome y Opera.
- SpiderMonkey – en Firefox.
- Hay otros nombres en clave como «Trident» y «Chakra» para diferentes versiones de IE, «ChakraCore» para Microsoft Edge, «Nitro» y «SquirrelFish» para Safari, etc.
Los términos anteriores son buenos para recordar porque se usan en artículos de desarrolladores en Internet. Nosotros también los usaremos. Por ejemplo, si «una característica X es soportada por V8», entonces probablemente funcione en Chrome y Opera.
¿Cómo funcionan los motores?
Los motores son complicados. Pero lo básico es sencillo.
- El motor (incrustado si es un navegador) lee («analiza») el script.
- Luego convierte («compila») el script al lenguaje de máquina.
- Y luego el código de la máquina se ejecuta bastante rápido.
El motor aplica optimizaciones en cada paso del proceso. Incluso observa el script compilado mientras se ejecuta, analiza los datos que fluyen a través de él y optimiza aún más el código de la máquina en función de ese conocimiento.
JavaScript moderno es un lenguaje de programación «seguro». No proporciona acceso de bajo nivel a la memoria o la CPU, ya que fue creado inicialmente para navegadores que no lo requieren.
Las capacidades de JavaScript dependen en gran medida del entorno en el que se ejecuta. Por ejemplo, Node.js admite funciones que permiten a JavaScript leer / escribir archivos arbitrarios, realizar solicitudes de red, etc.
JavaScript en el navegador puede hacer todo lo relacionado con la manipulación de la página web, la interacción con el usuario y el servidor web.
Por ejemplo, JavaScript en el navegador puede:
- Agregue nuevo HTML a la página, cambie el contenido existente, modifique los estilos.
- Reaccione a las acciones del usuario, ejecute clics del mouse, movimientos del puntero, pulsaciones de teclas.
- Envíe solicitudes a través de la red a servidores remotos, descargue y cargue archivos (las denominadas tecnologías AJAX y COMET ).
- Obtenga y configure cookies, haga preguntas al visitante, muestre mensajes.
- Recuerde los datos del lado del cliente («almacenamiento local»).
Las habilidades de JavaScript en el navegador están limitadas por el bien de la seguridad del usuario. El objetivo es evitar que una página web maligna acceda a información privada o dañe los datos del usuario.
Ejemplos de tales restricciones incluyen:
- El JavaScript de una página web no puede leer/escribir archivos arbitrarios en el disco duro, copiarlos o ejecutar programas. No tiene acceso directo a las funciones del sistema operativo.
- Los navegadores modernos le permiten trabajar con archivos, pero el acceso es limitado y sólo se proporciona si el usuario realiza ciertas acciones, como «soltar» un archivo en una ventana del navegador o seleccionarlo mediante una etiqueta <input>.
- Hay formas de interactuar con la cámara/micrófono y otros dispositivos, pero requieren el permiso explícito del usuario. Así que una página habilitada con JavaScript puede no habilitar a escondidas una cámara web, observar los alrededores y enviar la información a la NSA.
- Las diferentes pestañas/ventanas generalmente no se conocen entre sí. A veces lo hacen, por ejemplo cuando una ventana usa JavaScript para abrir la otra. Pero incluso en este caso, el Javascript de una página puede no acceder a la otra si provienen de sitios diferentes (de un dominio, protocolo o puerto diferente).
- JavaScript puede comunicarse fácilmente a través de la red con el servidor de donde vino la página actual. Pero su capacidad para recibir datos de otros sitios/dominios está paralizada. Aunque es posible, requiere un acuerdo explícito (expresado en cabeceras HTTP) desde el lado remoto. Una vez más, esa es una limitación de seguridad.
Esos límites no existen si se utiliza JavaScript fuera del navegador, por ejemplo en un servidor. Los navegadores modernos también permiten plugins/extensiones que pueden pedir permisos extendidos.
Contenido