Introducción

JavaScript es un lenguaje de scripting orientado a objetos y multiplataforma. Es un lenguaje pequeño y ligero. Dentro de un entorno host (por ejemplo, un navegador web), JavaScript puede conectarse a los objetos de su entorno para proporcionar control programático sobre ellos.

JavaScript contiene una biblioteca estándar de objetos, como Array, Date y Math, y un conjunto central de elementos de lenguaje, como operadores, estructuras de control y declaraciones. El JavaScript central se puede ampliar para diversos propósitos mediante la adición de objetos adicionales; por ejemplo:

  • JavaScript del lado del cliente extiende el lenguaje central al suministrar objetos para controlar un navegador y su Modelo de Objeto de Documento (DOM). Por ejemplo, las extensiones del lado del cliente permiten a una aplicación colocar elementos en un formulario HTML y responder a eventos del usuario, como clics de ratón, entrada de formulario y navegación de página.
  • JavaScript del lado del servidor extiende el lenguaje central al suministrar objetos relevantes para ejecutar JavaScript en un servidor. Por ejemplo, las extensiones del lado del servidor permiten a una aplicación comunicarse con una base de datos, proporcionar continuidad de información de una invocación a otra de la aplicación o realizar manipulaciones de archivos en un servidor.
Lo que ya deberías saber

Esta guía asume que tienes el siguiente conocimiento básico:

  • Una comprensión general de Internet y la World Wide Web (WWW).
  • Un buen conocimiento práctico de HyperText Markup Language (HTML).
  • Alguna experiencia en programación. Si eres nuevo en la programación, prueba uno de los tutoriales vinculados en la página principal sobre JavaScript.
JavaScript y Java

JavaScript y Java son similares en algunos aspectos pero fundamentalmente diferentes en otros. El lenguaje JavaScript se parece a Java pero no tiene la tipificación estática y la comprobación de tipos fuertes de Java. JavaScript sigue la sintaxis de expresiones de Java, convenciones de nomenclatura y constructos básicos de control, lo que fue la razón por la que se cambió de LiveScript a JavaScript.

A diferencia del sistema de tiempo de compilación de clases de Java construido por declaraciones, JavaScript admite un sistema en tiempo de ejecución basado en un pequeño número de tipos de datos que representan valores numéricos, booleanos y de cadena. JavaScript tiene un modelo de objeto basado en prototipos en lugar del modelo de objeto basado en clases más común. El modelo basado en prototipos proporciona herencia dinámica; es decir, lo que se hereda puede variar para objetos individuales. JavaScript también admite funciones sin requisitos declarativos especiales. Las funciones pueden ser propiedades de objetos, ejecutándose como métodos de tipo no estricto.

JavaScript es un lenguaje muy libre en comparación con Java. No es necesario declarar todas las variables, clases y métodos. No es necesario preocuparse por si los métodos son públicos, privados o protegidos, y no es necesario implementar interfaces. Variables, parámetros y tipos de retorno de funciones no son explícitamente tipados.

Hola Mundo
Para empezar a escribir JavaScript, abre el Scratchpad y escribe tu primer código JavaScript "Hola Mundo": function saludar(nombre) { alert("Hola " + nombre); } saludar("Mundo"); ¡Selecciona el código en el pad y presiona Ctrl+R para ver cómo se despliega en tu navegador!
Variables

Utilizas variables como nombres simbólicos para valores en tu aplicación. Los nombres de las variables, llamados identificadores, deben cumplir ciertas reglas.

Un identificador de JavaScript debe comenzar con una letra, guion bajo (_), o signo de dólar ($); los caracteres subsiguientes también pueden ser dígitos (0-9). Debido a que JavaScript distingue entre mayúsculas y minúsculas, las letras incluyen los caracteres "A" hasta "Z" (mayúsculas) y los caracteres "a" hasta "z" (minúsculas).

Puedes utilizar letras ISO 8859-1 o Unicode, como å y ü, en identificadores. También puedes usar secuencias de escape Unicode como caracteres en identificadores. Algunos ejemplos de nombres legales son Number_hits, temp99 y _name.

Declaración de variables
Puedes declarar una variable de tres maneras:

Con la palabra clave var. Por ejemplo, var x = 42. Esta sintaxis se puede utilizar para declarar variables locales y globales.

Asignándole simplemente un valor. Por ejemplo, x = 42. Esto siempre declara una variable global. Genera una advertencia estricta de JavaScript. No deberías usar esta variante.

Con la palabra clave let. Por ejemplo, let y = 13. Esta sintaxis se puede utilizar para declarar una variable local con ámbito de bloque. Consulta Ámbito de variable a continuación.

Ámbito de variable

Cuando declaras una variable fuera de cualquier función, se llama variable global, porque está disponible para cualquier otro código en el documento actual. Cuando declaras una variable dentro de una función, se llama variable local, porque está disponible solo dentro de esa función.

JavaScript antes de ECMAScript 2015 no tiene un ámbito de declaración de bloque; más bien, una variable declarada dentro de un bloque es local a la función (o ámbito global) en la que reside el bloque. Por ejemplo, el siguiente código registrará 5, porque el ámbito de x es la función (o contexto global) dentro de la cual se declara x, no el bloque, que en este caso es una declaración if.

if (true) { var x = 5; } console.log(x); // 5

Este comportamiento cambia al usar la declaración let introducida en ECMAScript 2015.

if (true) { let y = 5; } console.log(y); // ReferenceError: y no está definido
Variables globales

Las variables globales son, de hecho, propiedades del objeto global. En páginas web, el objeto global es window, por lo que puedes establecer y acceder a variables globales utilizando la sintaxis window.variable.

En consecuencia, puedes acceder a variables globales declaradas en una ventana o marco desde otra ventana o marco especificando el nombre de la ventana o marco. Por ejemplo, si se declara una variable llamada phoneNumber en un documento, puedes referirte a esta variable desde un iframe como parent.phoneNumber.

Constantes

Puedes crear una constante con nombre de solo lectura con la palabra clave const. La sintaxis de un identificador de constante es la misma que la de un identificador de variable: debe comenzar con una letra, guion bajo (_) o signo de dólar ($), y puede contener caracteres alfabéticos, numéricos o de guion bajo.

const PI = 3.14;

Una constante no puede cambiar su valor mediante asignación ni puede ser redeclarada mientras se esté ejecutando el script. Debe inicializarse con un valor.

Las reglas de alcance para las constantes son las mismas que las de las variables de ámbito de bloque let. Si se omite la palabra clave const, se asume que el identificador representa una variable.

No puedes declarar una constante con el mismo nombre que una función o variable en el mismo ámbito. Por ejemplo:

// ESTO PROVOCARÁ UN ERROR function f() {}; const f = 5; // ESTO TAMBIÉN PROVOCARÁ UN ERROR function f() { const g = 5; var g; // sentencias } Sin embargo, los atributos de los objetos no están protegidos, por lo que la siguiente declaración se ejecuta sin problemas. const MI_OBJETO = {"clave": "valor"}; MI_OBJETO.clave = "otroValor";
Tipos de datos

La última especificación de ECMAScript define siete tipos de datos:

  • Seis tipos de datos que son primitivos:
    • Boolean. true y false.
    • null. Una palabra clave especial que denota un valor nulo. Debido a que JavaScript distingue entre mayúsculas y minúsculas, null no es lo mismo que Null, NULL u otra variante.
    • undefined. Una propiedad de nivel superior cuyo valor es undefined.
    • Number. 42 o 3.14159.
    • String. "Howdy"
    • Symbol (nuevo en ECMAScript 2015). Un tipo de datos cuyas instancias son únicas e inmutables.
  • y Object

Aunque estos tipos de datos son relativamente pocos, te permiten realizar funciones útiles con tus aplicaciones. Objetos y funciones son los otros elementos fundamentales en el lenguaje. Puedes pensar en los objetos como contenedores con nombre para valores y en las funciones como procedimientos que tu aplicación puede realizar.

Declaración if...else

Utiliza la declaración if para ejecutar una instrucción si una condición lógica es verdadera. Utiliza la cláusula else opcional para ejecutar una instrucción si la condición es falsa. Una instrucción if se ve de la siguiente manera:

if (condición) { instrucción_1; } else { instrucción_2; } La condición puede ser cualquier expresión que se evalúe como verdadera o falsa. Consulta Boolean para obtener una explicación de qué se evalúa como verdadero y falso. Si la condición se evalúa como verdadera, se ejecuta instrucción_1; de lo contrario, se ejecuta instrucción_2. instrucción_1 e instrucción_2 pueden ser cualquier instrucción, incluidas otras instrucciones if anidadas.

También puedes agrupar las instrucciones utilizando else if para tener múltiples condiciones probadas en secuencia, de la siguiente manera:

if (condición_1) { instrucción_1; } else if (condición_2) { instrucción_2; } else if (condición_n) { instrucción_n; } else { instrucción_última; } En el caso de múltiples condiciones, solo se ejecutará la primera condición lógica que se evalúe como verdadera. Para ejecutar múltiples instrucciones, agrúpalas dentro de una instrucción de bloque ({ ... }). En general, es buena práctica usar siempre instrucciones de bloque, especialmente al anidar instrucciones if: if (condición) { instrucción_1_se_ejecuta_si_la_condición_es_verdadera; instrucción_2_se_ejecuta_si_la_condición_es_verdadera; } else { instrucción_3_se_ejecuta_si_la_condición_es_falsa; instrucción_4_se_ejecuta_si_la_condición_es_falsa; } Se recomienda no utilizar asignaciones simples en una expresión condicional, porque la asignación puede confundirse con la igualdad al mirar el código. Por ejemplo, no uses el siguiente código: if (x = y) { /* instrucciones aquí */ } Si necesitas usar una asignación en una expresión condicional, una práctica común es colocar paréntesis adicionales alrededor de la asignación. Por ejemplo: if ((x = y)) { /* instrucciones aquí */ }
Declaración while

Una declaración while ejecuta sus instrucciones siempre que una condición especificada se evalúe como verdadera. Una declaración while se ve de la siguiente manera:

while (condición) instrucción Si la condición se vuelve falsa, la instrucción dentro del bucle deja de ejecutarse y el control pasa a la instrucción siguiente al bucle.

La prueba de la condición ocurre antes de que se ejecute la instrucción en el bucle. Si la condición devuelve verdadero, se ejecuta la instrucción y se vuelve a probar la condición. Si la condición devuelve false, la ejecución se detiene y el control se pasa a la instrucción siguiente a while.

Para ejecutar múltiples instrucciones, utiliza una instrucción de bloque ({ ... }) para agrupar esas instrucciones.

Ejemplo:

El siguiente bucle while itera siempre que n sea menor que tres:

var n = 0; var x = 0; while (n < 3) { n++; x += n; }

Con cada iteración, el bucle incrementa n y agrega ese valor a x. Por lo tanto, x y n toman los siguientes valores:

  • Después del primer pase: n = 1 y x = 1
  • Después del segundo pase: n = 2 y x = 3
  • Después del tercer pase: n = 3 y x = 6

Después de completar el tercer pase, la condición n < 3 ya no es verdadera, por lo que el bucle termina.

Declaraciones de funciones

Una definición de función (también llamada declaración de función o declaración de función) consta de la palabra clave function, seguida de:

  • El nombre de la función.
  • Una lista de argumentos para la función, encerrados entre paréntesis y separados por comas.
  • Las declaraciones de JavaScript que definen la función, encerradas entre llaves, { }.

Por ejemplo, el siguiente código define una función simple llamada square:

function square(number) { return number * number; }

La función square toma un argumento llamado number. La función consta de una declaración que dice devolver el argumento de la función (es decir, number) multiplicado por sí mismo. La declaración de retorno especifica el valor devuelto por la función.

return number * number;

Los parámetros primitivos (como un número) se pasan a las funciones por valor; el valor se pasa a la función, pero si la función cambia el valor del parámetro, este cambio no se refleja globalmente ni en la función de llamada.

Referencia
  • Toda la documentación en esta página se ha tomado de MDN