Please note, this is a STATIC archive of website developer.mozilla.org from November 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

Este articulo necesita una revisión editorial. Cómo puedes ayudar.

Este capítulo analiza la gramática básica JavaScript, declaraciones de variables, tipos de datos y literales.

Conceptos básicos

JavaScript esta influenciado sobretodo por la sintaxis de Java, pero también de Awk, Perl y Python.

JavaScript es case-sensitive (distingue mayúsculas y minúsculas) y utiliza el conjunto de caracteres Unicode.

En JavaScript, las instrucciones son llamadas Sentencias y son separadas por un punto y coma (;). Los espacios, tabulaciones y caracteres de nueva línea son llamados espacios en blanco. El texto original de los scripts de Javascripts se obtiene escaneando de izquierda a derecha y se convierte en una secuencia de elementos de entrada que son tokens, caracteres de control, terminaciones de línea, comentarios o espacios de línea. ECMAScript también define ciertas keywords (palabras clave) y literales y tiene reglas automáticas para insertar puntos y coma (ASI) al final de las sentencias. Sin embargo, es recomendable siempre añadir punto y coma al final de sus sentencias; evitará efectos secundarios. Para más información, ver la referencia detallada sobre grámatica léxica (en inglés) de Javascript.

Comentarios

La sintaxis de comentarios es la misma como en C++ y en muchos otros lenguajes:

// comentario en una sola línea
 
/* este es un comentario 
   multilinea
 */
 
/* no puedes, sin embargo, /* anidar comentarios */ SyntaxError */
 
 
 
 
 
 
 

Declaraciones

Hay tres tipos de declaraciones en JavaScript.

var
Declara una variable, inizializa opcionalmente un valor.
let
Declara una variable local en un bloque de ámbito, inicializa opcionalmente un valor.
const
Declaración de una constante de solo lectura.

Variables

Las variables se usan como nombres simbólicos para valores en tu aplicación. Los nombres de las variables, llamados identificadores, se rigen por ciertas reglas.

Un identificador en JavaScript tiene que empezar con una letra, un guión bajo (_) o un símbolo de dólar ($); los valores subsiguientes puede ser números. Debido a que JavaScript diferencia entre mayúsculas y minúsculas, las letras incluyen tanto desde la "A" hasta la "Z"(mayúsculas) como de la "a" hasta la "z".

Puedes usar la ISO 8859-1 o letras Unicode tales como å y ü en un identificador. Puedes también usar el Unicode escape sequences como caracteres in identificadores.

Algunos ejemplos de nombre permitidos son Numero_Visitastemp99, y _nombre.

Declarando Variables

Puedes declarar una variable de tres maneras:

  • Con la palabra clave var. Por ejemplo, var x = 42. Esta sintaxis puede ser usada para declarar tanto variables locales como globales.
  • Simplemente asignándole un valor. Por ejemplo, x = 42. Esto siempre declara una variable global y no puede ser cambiado a nivel local. Esto genera una advertencia strict de JavaScript. Esta variante no debe usarse.
  • Con la palabra clave let. Por ejemplo, let y = 13. Esta variable puede ser usada para declarar una variable local en un bloque de ámbito. Ver Ámbito de variable más abajo.

Evaluando variables

Una variable declarada usando la sentencia var o let sin asignarle un valor inicial tiene el valor undefined.

Al intentar acceder a una variable no declarada dará como resultado la excepción ReferenceError:

var a;
console.log("El valor de a es " + a); // muestra "El valor de a es undefined"
console.log("El valor de b es " + b); // lanza la excepcion ReferenceError

Se puede usar undefined para determinar si una variable tiene un valor. En el siguiente código a la variable input no se le asigna ningún valor y la sentencia de control if la evalúa a true.

var input;
if(input === undefined){
  hazEsto();
} else {
  hazEso();
}

El valor undefined se comporta como un false cuando se usa en una operación lógica. Por ejemplo, el siguiente código ejecuta la función myFunction porque el elemento myArray no ha sido definido:

var myArray = new Array();
if (!myArray[0]) myFunction(); 

El valor undefined se convierte en NaN, no numérico, cuando se usa en una operación aritmética.

var a;
a + 2 = NaN

Cuando se evalúa una variable nula, el valor null se comporta como el 0 en operaciones aritméticas y como false en operaciones lógicas. Por ejemplo:

var n = null;
console.log(n * 32); // Will log 0 to the console

Ámbito de variable

Cuando declara una variable fuera de una función, esta es llamada una variable global, porque esta disponible para cualquier otro código en el documento actual. Cuando declara una variable dentro de una función, esta es llamada variable local, porque esta disponible solo dentro de la función.

Antes de ECMAScript 6 Javascript no tiene ámbito de  sentencias de bloque; más bien, una variable declarada dentro de un bloque es local para la función(o ámbito global) que el bloque reside dentro. 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 la sentencia if.

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

Este comportamiento cambia, cuando usamos la declaración let introducida en ECMAScript 6.

if (true) {
let y = 5;
}
console.log(y);  // undefined

Variable hoisting

Algo inusual acerca de la variables en JavaScript es que puede hacer referencia a una variable declarada más tarde,  sin conseguir una excepción. Este concepto es conocido como hoisting; son en un sentido variables en JavaScript "elevadas" o elevadas a la parte superior de la función o declaración. Sin embargo, las variables que no se han inicializado todavía devolverán un valor undefined.

/**
 * Example 1
 */
console.log(x === undefined); // logs "true"
var x = 3;

/**
 * Example 2
 */
// will return a value of undefined
var myvar = "my value";
 
(function() {
  console.log(myvar); // undefined
  var myvar = "local value";
})();

Los mismos ejemplos anteriores serán interpretados como:

/**
 * Example 1
 */
var x;
console.log(x === undefined); // logs "true"
x = 3;
 
/**
 * Example 2
 */
var myvar = "my value";
 
(function() {
  var myvar;
  console.log(myvar); // undefined
  myvar = "local value";
})();

El porque de hoisting, todas las declaraciones var en una función deben colocarse al inicio de la función como sea posible. Esta buena práctica mejora la claridad del código.

Variables Globales

Las variables globales están en los datos de propiedades del objeto global. En las página web el objeto global es window,  puede establecer y acceder a las variables globales usando la sintaxis window.variable.

Por lo tanto, puedes acceder a variables globales declaradas en una ventana o frame de otra ventana o frame especificando el nombre de la ventana o frame. Por ejemplo, si una variable denominada phoneNumber es declarada en un documento, puede consultar a esta variable desde un iframe como parent.phoneNumber.

Constantes

Puede crear una de solo lectura, llamada constante con la palabra clave const. La sintaxis del identificador de la constante es el mismo como para un indentificador de variable: debe de empezar con una letra, guión bajo(_) o símbolo de dollar($) y puede contener alfabéticos, numéricos o guiones bajos.

const prefix = '212';

Una constante no puede cambiar de valor mediante la asignación. o volver a ser declarado mientras se ejecuta el script.

Las reglas de ámbito para las constantes son las mismas como los de la variable let en un ámbito de bloque. Si la palabra clave es omitida, el identificador  se asume que representar una variable.

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

// ESTO CAUSARÁ UN ERROR
function f() {};
const f = 5;

// ESTO TAMBIÉN CAUSARÁ UN ERROR
function f() {
  const g = 5;
  var g;

  //sentencias
}

Estructura de datos y tipos

Tipos de datos

El último estándar ECMAScript define siete tipos de datos:

  • Seis tipos de datos que son primitivos:
    • Booleantrue y false.
    • null. Una palabra clave especial que denota un valor null. Como JavaScript es case-sensitive, null no es lo mismo que null, NULL, o cualquier otra variante.
    • undefined. Una propiedad de alto nivel cuyo valor no es definido.
    • Number42 o 3.14159.
    • String. "Hola"
    • Symbol (nuevo en ECMAScript 6).
  • y Object.

Aunque estos tipos de datos son una cantidad relativamente pequeña cantidad, permite realizar funciones útiles con sus aplicaciones. Los otros elementos fundamentales en el lenguaje son los Objects y las funciones. Puedes pensar en objetos como contenedores con nombre para los valores, y funciones para procedimientos que su aplicación puede realizar.

Conversión de tipos de datos

JavaScript es un lenguaje de tipos dinámicos. Eso quiere decir que no tienes que especificar el tipo de dato de la variable cuando la declaras, y los tipos de datos son convertidos automáticamente de acuerdo a lo que se necesite en la ejecución del script. Así, por ejemplo, puedes definir una variable de la siguiente manera:

var respuesta = 42;

Y luego, puedes asignarle una cadena a esa misma variable, por ejemplo:

respuesta = "Gracias por todo el pescado...";

Debido a que es un lenguaje de tipos dinámicos, esta asignación no causa un mensaje de error.

En expresiones que involucran valores numéricos y de string con el operador +, JavaScript convierte valores numéricos a string. Por ejemplo, considera las siguientes declaraciones:

x = "La respuesta es " + 42 // "La respuesta es 42"
y = 42 + " es la respuesta" // "42 es la respuesta"

En declaraciones que involucran otros operadores, JavaScript no convierte los valores numéricos a string. Por ejemplo:

"37" - 7 // 30
"37" + 7 // "377"

Convertir string a números

En el caso que un valor representando un número está en memoria como string, hay métodos para la conversión.

parseInt() y parseFloat()

parseInt sólo retornará números enteros, por lo que su uso es disminuido por los decimales. Adicionalmente, una buena práctica para parseInt es incluir siempre el parámetro radix. El parámetro rádix es usado para especificar qué sistema numérico será usado.

Un método alternativo para recibir un número de un string es con el operador + (más unario):

"1.1" + "1.1" = "1.11.1"
(+"1.1") + (+"1.1") = 2.2   
// Nota: los paréntesis son para fines demostrativos, no son oblitarios.

Literales

Los literales se utilizan para representar valores en JavaScript. Estos son valores fijos, no variables, que literalmente proporciona en su script. Esta sección describe los siguientes tipos de literales:

Literales Array

Un literal array es un lista de cero o más expresiones, cada uno representa un elemento array, entre corchetes ([]). Cuando crea un array usando un literal array, se inicializa con los valores especificados como sus elementos, y su longitud se establece por el número de argumentos especificados. 

El siguiente ejemplo crea el array cafes con tres elementos y una longitud de tres:

var cafes = ["Tostado Frances", "Colombiano", "Kona"];
 

Nota: Un literal array es un tipo de inicializador de object. Consulte Uso de iniciadores de objeto.

Si un array se crea usando un literal en un script de nivel superior, JavaScript interpreta el array cada vez que se evalúa la expresión que contiene el literal array. Además, un literal usado en una función se crea cada vez que es llamada la función.

Los literales array son también objetos array. Consulte Array y  colecciones indexadas para los detalles sobre objetos Array.

Comas adicionales en literales array

No tienes que especificar todos los elementos en un literal array. Si pones dos comas en una fila,  se crea el array con undefined para los elementos no especificados. El siguiente ejemplo crea el array peces: 

var peces = ["Leon", , "Angel"];
 

Este array tiene dos elementos con valores y un elemento vacío (peces[0] es "Leon", peces[1] es undefined, y peces[2] es "Angel").

Si incluyes una coma al final de la lista de los elementos, la coma es ignorada. En el siguiente ejemplo, la longitud del array es tres. No hay  miLista[3]. Todas las demás comas en la lista indican un nuevo elemento. (Nota: Las comas finales pueden crear errores en las versiones anteriores del navegador y es una buena practica eliminarlos.)

var miLista = ['casa', , 'escuela', ];
 

En el siguiente ejemplo, la longitud del array es cuatro, y miLista[0] y miLista[2]  faltan.

var miLista = [ , 'casa', , 'escuela'];
 

En la siguiente ejemplo, la longitud del array es cuatro, y miLista[1] y miLista[3] faltan. Solo la última coma es ignorada.

var miLista = ['casa', , 'escuela', , ];
 

Comprender el comportamiento de las comas adicionales es importante para comprender JavaScript como un lenguaje, sin embargo cuando escribimos nuestro propio código: declaramos explícitamente los elementos que faltan como undefined esto aumentará la claridad y el mantenimiento de su código.

Literales Booleanos

Los literales de tipo Booleanos tienen 2 valores posibles: true y false.

NO confundir los valores primitivos Booleanos  true y false con los valores true y false del Objeto Booleano. El objeto Booleano es un contenedor alrededor del tipo de dato Primitivo Booleano. Para más información revisa Booleano .

Literales Enteros

Los Enteros pueden ser expresados en decimal (base 10), hexadecimal (base 16), octal (base 8) y binario (base 2).

  • El Literal entero decimal consiste en una secuencia de dígitos sin un líder 0 (cero).
  • 0 (cero ) en un literal entero indica que está en octal. Los enteros octales pueden incluir sólo los dígitos 0-7.
  • El tipo 0x (or 0X) indica hexadecimal. Los enteros Hexadecimal pueden incluir dígitos del  (0-9) y letras a-f y A-F.

Algunos ejemplos de enteros Literales son:

0, 117 and -345 (decimal, base 10)
015, 0001 and -077 (octal, base 8) 
0x1123, 0x00111 and -0xF1A7 (hexadecimal, "hex" or base 16)
 
 
 

Para mas Información, revisa la  Referencia de literales Numéricos en la Léxica Gramática.

Literales de Punto Flotante

Un Literal de punto flotante, puede tener las siguientes partes:

  • Un entero decimal que puede tener signo (precedido por  "+" o "-"),
  • Un Punto decimal ("."),
  • Una Fracción (otro número decimal),
  • Un Exponente.

La parte exponente es una  "e" o "E" seguida por un entero, la cual puede tener un signo (precedido por "+" o "-"). Un literal de punto flotante debe tener un dígito y bien sea un punto decimal  o el exponente "e" (or "E").

Algunos ejemplos de literales de punto FLotante Son:  3.1415, -3.1E12, .1e12, y 2E-12.

Específicamente, la sintaxis es:

[(+|-)][digitos][.digitos][(E|e)[(+|-)]digitos]
 

Por ejemplo:

3.14
2345.789
.3333333333333333333
-.283185307179586
 
 
 
 

Literales Tipo Objeto

Un literal Objeto es una lista de cero o mas parejas de nombres de propiedades asociadas con el respectivo valor, encerradas entre corchetes ({}). No debes usar un objetos literal al comienzo de una sentencia. Esto dará lugar a un error o no se comprotará como se espera, porque los corchetes { serán interpretados como el inicio de un bloque.

El siguiente es un ejemplo de un objeto literal. El primer elemento del objeto carro define una propiedad, miCarro, y asigna a este el String , "Saturn";  el segundo elemento, a la propiedad getCarro, se le asigna inmediatamente el resultado de invocar a la función  (TiposCarro("Honda")); el tercer elemento, la propiedad especial, usa una variable existente (Ventas).

var Ventas = "Toyota";

function TiposCarro(nombre) {
  if (nombre== "Honda") {
    return nombre;
  } else {
    return "Lo siento, nosotros no vendemos " + nombre+ ".";
  }
}

var carro = { miCarro: "Saturn", getCarro: TiposCarro("Honda"), especial: Ventas};

console.log(carro.miCarro);  // Saturn
console.log(carro.getCarro); // Honda
console.log(carro.especial); // Toyota
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Adicionalmente el nombre de una propiedad puede ser un literal entero o puede corresponder a otro objeto, como se muestra a continuación.

var auto = { algunosAutos: {a: "Saab", "b": "Jeep"}, 7: "Mazda" };

console.log(auto.algunosAutos.b); // Jeep
console.log(auto[7]); // Mazda
 
 
 
 

Los nombres de las propiedades de un objeto pueden ser cualquier string, incluyendo un  string vacio. si el nombre de la propiedad no es un identificador JavaScript valido, este debe ser encerrado en barras cuadradas. Los nombres de propiedad que no son identificadores validos, no pueden ser accedidos con la propiedad punto  (.), pero pueden ser accedidos y seteados con la notacion de un arreglo ("[]").

var propiedadesDeNombreInusual = {
  "": "An empty string",
  "!": "Bang!"
}
console.log(propiedadesDeNombreInusual ."");   // SyntaxError: Unexpected string
console.log(propiedadesDeNombreInusual [""]);  // "Un string vacio"
console.log(propiedadesDeNombreInusual .!);    // SyntaxError: Unexpected token !
console.log(propiedadesDeNombreInusual ["!"]); // "Bang!"
 
 
 
 
 
 
 
 

Ejemplo 2:

var foo = {a: "alpha", 2: "two"};
console.log(foo.a);    // alpha
console.log(foo[2]);   // two
//console.log(foo.2);  // Error: missing ) after argument list
//console.log(foo[a]); // Error: a is not defined
console.log(foo["a"]); // alpha
console.log(foo["2"]); // two
 
 
 
 
 
 
 

Literales String

Un literal String corresponde a Cero o mas caracteres, encerrados dentro de comillas dobles (") o sencilla (') . Un string debe estar delimitado por comillas del mismo tipo; esto quiere decir que, siempre ambas son dobles o sencillas en cada uno de los casos. Los siguientes son ejemplos de literales String:

  • "foo"
  • 'bar'
  • "1234"
  • "Una linea \n otra linea"
  • "El gato de Jhon"

Puedes utilizar cualquiera de los métodos del objeto  String en un literal de tipo string—JavaScript automáticamente convierte el literal string en un objeto String de manera temporal, llama al método, y finalmente destruye el objeto temporal de tipo String. También puedes usar la propiedad String.length con un literal string:

console.log("El gato de Jhon".length) 
// Imprimira el numero de caracteres en el literal, incluyendo espacios en blanco. 
// En este caso, 15.
 
 
 

Se recomienda que uses un literal string a menos que sea específicamente necesario el uso de un objeto de tipo String. Mira String para detalles acerca de objetos String .

Uso de caracteres especiales en strings

Adicional a los caracteres normales, también puede incluir caracteres especiales en los strings, como se muestra en el siguiente ejemplo:

"una linea \n otra linea"
 

La siguiente tabla lista los caracteres especiales que se pueden usar en un string JavaScript.

Tabla 2.1 caracteres especiales JavaScript
Character Meaning
\b Retroceso
\f Avance de Página
\n Nueva Línea
\r Retorno de Línea
\t Tabulador
\v Tabulador Vertical
\' Apóstrofe o comilla sencilla
\" Comilla doble
\\ Carácter Backslash
\XXX Los caracteres con la codificación Latin-1 especificada por tres dígitos octales XXX entre 0 y 377. Por ejemplo, \251 es la secuencia octal para el símbolo copyright.
\xXX Los caracteres con la codificación Latin-1 especificada por dos dígitos hexadecimales XX entre 00 y FF. Por ejemplo, \xA9 es la secuencia hexadecimal para el símbolo copyright.
\uXXXX Los caracteres Unicode especificados por la secuencia de cuatro dígitos Hexadecimales  XXXX. Por ejemplo, \u00A9 es la secuencia Unicode para el símbolo copyright . Ver Secuencias de escape Unicode .

Caracteres de Escape

Para caracteres no listados en la  Tabla 2.1, la precedencia del  backslash es ignorada, pero su uso esta obsoleto y debe ser evitado.

Puedes insertar comillas dobles dentro de un string anteponiendo un carácter backslash. significa esto como un escape de las comillas. Por ejemplo:

var quote = "El leee \"La cremación de Sam McGee\" de R.W. Service.";
console.log(quote);
 
 

The result of this would be:

"El leee \"La cremación de Sam McGee\" de R.W. Service.
 

Para incluir un literal backslash en un string, debes usar el caracter de escape backslash. Por ejemplo, para asignar la ruta c:\temp a un string, use lo siguiente:

var home = "c:\\temp";
 

También puedes insertar saltos de línea. El backslash y el salto de línea son removidos del valor del string.

var str = "this string \
is broken \
across multiple\
lines."
console.log(str);   // this string is broken across multiplelines.
 
 
 
 
 

Aunque JavaScript no tiene sintaxis "heredoc" puede acercarse insertando un backslash y un salto de linea al final de cada linea:

var poem = 
"Roses are red,\n\
Violets are blue.\n\
I'm schizophrenic,\n\
And so am I."
 
 
 
 
 

Mas información

Este capítulo se enfoca en la sintaxis básica para los tipos y la declaración. Para aprender mas acerca de la construcción en lenguaje JavaScripts , vea también los siguientes capítulos en esta guía:

En el siguiente capítulo, daremos un vistazo al control de flujo y manejo de errores.

 

Etiquetas y colaboradores del documento

 Última actualización por: enriqueabsurdum,