Inicio > JavaScript, Libros > Review: Professional JavaScript for Web Developers, Capítulo 3 (Parte I)

Review: Professional JavaScript for Web Developers, Capítulo 3 (Parte I)

El capítulo tres explica las características básicas del lenguaje; es uno de los capítulos más largos del libro, así que voy a resumirlo muy brevemente porque la mayoría son cosas que ya sabe cualquier persona con un mínimo de conocimientos de JavaScript.

Sintaxis

El primer concepto es entender que el lenguaje es case-sensitivy – o lo que es lo mismo, existe diferencia entre mayúsculas y minúsculas – tanto en los nombres de las variables, funciones, operadores. Por lo que una variable que se llame nombre es diferente a una llamada Nombre.

Al igual que otros lenguajes existen unas reglas para definir los identificadores (o lo que es lo mismo, los nombres de las variables, funciones, propiedades, etc) y diferentes formatos para escribir comentarios (formato de una línea //, y formato de múltiples líneas encerrados entre /* */).

Las sentencias en JavaScript acaban con un punto y coma; aunque no es obligatorio es recomendable por un motivo muy importante. Las herramientas que comprimen el código JavaScript suelen quitar todos los espacios y saltos de línea, por lo que se producirían errores de sintaxis. De la misma forma se pueden combinar múltiples sentencias en bloques de código encerradas entre llaves {}. No es obligatorio las llaves cuando solo hay una sentencia pero se recomienda también su uso.

Palabras claves y reservadas

Como todo lenguaje existe un conjunto de palabras que tienen un objetivo especial y que no se pueden utilizar como identificadores.

Variables

Las variables en ECMAScript tienen un tipado blando, lo que significa que pueden almacenar diferentes tipos de datos. Para definir una variable utilizamos la palabra clave var seguido del nombre de la variable:

var nombre;

Cuando no inicializamos la variable, toma el valor undefined. Pero también podemos inicializar la variable cuando la definimos. Además podemos cambiar el tipo de la variable aunque inicialmente haya sido utilizada para almacenar un string.

var nombre = "Francisco";
nombre = 10;

No es recomendable cambiar el tipo de datos de una variable.

Lo más importante de esta sección es destacar que el operador var define una variable local al ámbito en el que ha sido definida. Es posible definir variables globales omitiendo la palabra var pero no se recomienda en absoluto ya que son mucho más dificiles de mantener y pueden causar confusión.

function hola(){
    var saludo = "hola"; //variable local
    alert(saludo);
}
hola(); //"hola"
alert(saludo); //undefined

function hola(){
    saludo = "hola"; //variable global
    alert(saludo);
}
hola(); //"hola"
alert(saludo); //"hola"

Para no estar utilizando todo el rato el operador var, podemos definir e inicializar tantas variables como queramos con una sola sentencia:

var nombre = "Fran",
edad = 23,
esChico = true;

Tipos de datos

En ECMAScript solamente hay cinco tipos de datos primitivos, Undefined, Null, Boolean, Number y String. Hay otro tipo de dato más complejo, Object, que es una lista de pares clave-valor. Con estos seis tipos de datos podemos representar todos los datos que imaginemos.

Al ser un lenguaje de tipado blando necesitamos determinar de alguna manera el tipo de una variable. El operador typeof nos devuelve un string indicando el tipo de la variable:

  • “undefined” si el valor es undefined
  • “boolean” si el valor es un Boolean
  • “string” si el valor es un string
  • “number” si el valor es un número
  • “object” si el valor es un objeto o null
  • “function” si el valor es una función

Un ejemplo de su uso:

var nombre = "Fran";
alert(typeof nombre); //"string"
El tipo undefined

El tipo Undefined solo tiene un posible valor, undefined. Cuando declaramos una variable pero no la inicializamos, se asigna el valor undefined. También podemos guardar el valor undefined en una variable pero no es una buena práctica.

Tenemos que tener en cuenta que una variable con el valor undefined es muy diferente de una variable que ni siquiera se haya declarado, ya que si utilizamos una variable que no ha sido definida causará un error. De todas formas el operador typeof devuelve undefined también para aquellas variables que no hayan sido declaradas.

El tipo null

El tipo null solo tiene un posible valor, null. Su valor indica un puntero a un objeto vacío, por lo que el operador typeof devuelve “object” cuando lo utilizamos con una variable que contiene el valor null.

El valor undefined es un valor derivado de null:

alert(null == undefined); //true

Aunque son valores relacionados, tienen diferentes usos. Nunca deberíamos establacer explicitamente el valor undefined a una variable. Si esperamos un objeto que todavía no está disponible, deberíamos de utilizar null en vez de undefined.

El tipo Boolean

Como cualquier persona con conocimientos de programación sabrá, el tipo boolean puede almacenar dos valores literales, true o false. Estos dos literales son case-sensitive por lo que True o False no son valores válidos para representar un booleano.

Para mí, lo más interesante de esta parte del capítulo es la conversión de los diferentes tipos de datos a un valor booleano, ya sea por medio del casting:

var nombre = "Fran";
var nombreComoBooleano = Boolean(nombre);

como por medio de la conversión automática, por ejemplo en sentencias condicionales:

var nombre = "Fran";
if(nombre){
     ....
}

Es importante saber que los siguientes valores se evaluarán como false: el mismo valor false, un string vacío “”, el número 0 y NaN (Not a Number), null y undefined. Cualquier otro valor se evaluará como true, incluido los números negativos, positivos, cadenas no vacías, el literal true y cualquier objeto.

El tipo Number

El tipo Number en ECMAScript permite almacenar cualquier número, ya sea en coma flotante según el formato IEEE 754, como números en distintas bases, decimal, octal o hexadecimal.

Como nota importante para evitar futuros problemas, destacar el problema de la aritmética en coma flotante. Por ejemplo al sumar 0.1 y 0.2 el resultado es 0.30000000000004 y no 0.3 como podemos esperar. Este problema no ocurre solo en ECMAScript, sino en todos los lenguajes que usen el formato IEEE 754.

El tipo Number tiene restricciones de memoria, el número más pequeño que podemos almacenar está almacenado en Number.MIN_VALUE, y el número más grande en Number.MAX_VALUE. Cualquier número que se salga de este rango automaticamente se ttrasnforma en un valor especial, Infinity. Para determinar si un valor es finito, podemos utilizar la función isFinite() que devuelve true solo si el número está entre el mínimo y el máximo valor.

NaN (Not a Number), es un valor númerico especial que indica que el valor almacenado no es válido, no es un número. En otros lenguajes de programación cuando dividimos por 0 causa un error de ejecución, en ECMAScript, dividir por 0 devuelve el valor NaN. Podemos utilizar la función isNaN() para determinar si un valor no es un número válido.

Al igual que con los booleanos, tenemos varias funciones para convertir cualquier tipo de dato a un valor numérico. La función casting Number() acepta cualquier tipo de datos e intenta devolver un número que lo represente, por ejemplo para el booleano false, devuelve 0. Es más recomendable utilizar las funciones parseInt() y parseFloat() aunque solo acepten strings.

El tipo String

El tipo String, al igual que otros lenguajes, representan un conjunto de carácteres de 16 bits Unicode. Pueden marcarse utilizando comillas dobles o simples, aunque no es como en PHP, no hay diferencia en como se interpreta una o otra, son exactamente iguales.

var nombreDoble = "Fran";
var nombreSimple = 'Fran';

Podemos utilizar la barra \ como carácter de escape:

var nombre = "Fran\nBelmonte"

Podemos hacer uso de la propiedad length para calcular el tamaño de un string:

nombre.length

Son inmutables, por lo que una vez creados su valor no puede cambiar. Si queremos cambiar el valor, debemos sustituir el valor de la variable con un nuevo string. Podemos utilizar el operador + para concatenar cadenas:

var nombre = "Fran";
nombre = nombre + "cisco";

Podemos utilizar toString() para convertir cualquier tipo de datos en una cadena:

var edad = 23;
var edadComoString = edad.toString(); //Devuelve el string "23"

Si el valor es null o undefined el método toString() no está disponible, por lo que podemos utilizar la función casting String() donde si el valor tiene disponible el método toString() lo utiliza, si el valor es null devuelve “null” y si el valor es undefined devuelve “undefined”.

Y hasta aquí la primera parte del capítulo, en la segunda parte explica los operadores, sentencias condicionales, bucles y funciones. Lo resumiré muy brevemente, que el capitulo cuatro es mucho más interesante.

About these ads
Categorías:JavaScript, Libros
  1. 19 agosto, 2011 en 7:52 | #1

    Me gustaría hablar contigo y tomarme un café en la uni, ya que somos un grupo de chavales que estamos montando una red social de música salidos de la UPV en Symfony. La red social es bandness.com y blog.bandness.com.

    • 24 agosto, 2011 en 9:03 | #2

      Buenos días Chaume.

      Parece un proyecto muy interesante, acabo de ver la presentación que hicisteis en la UPV y va a tener muy buena pinta por lo que veo. Quedar va a estar más difícil ya que trabajo de 9 a 14 y de 15 a 19, pero me apunto tu correo y hablaré con mi jefe a ver si la semana que viene puedo escaparme un rato por la mañana. No sé si podría participar en el proyecto debido a la falta de tiempo, pero parece muy interesante. ¿Está programado en Symfony2? De Symfony1 no tengo mucha idea, he empezado con Symfony2 por un proyecto personal que tengo entre manos.

      Bueno, hablamos mejor en persona, intentaré el miércoles o el jueves que viene (1 o 2 de Septiembre) escaparme un rato. ¿Te viene bien esos días? ¿Sobre que horas?

      Saludos.

  2. 24 agosto, 2011 en 10:06 | #3

    Yo ahora ya no trabajo en la universidad y estoy en Sueca ahora. Hasta el 11 de Septiembre haré jornada intensiva así que cualquier tarde me viene bien! Un saludo, Chaume

  3. 17 enero, 2013 en 22:47 | #4

    En el primer caso siempre va a devolvernos un valor del tipo object porque es una función por tanto lo aconsejable es comparar que sea distinto de null, mientras en el segundo caso como estamos accediendo directamente al elemento si podremos comparar con undefined.

  1. Aún no hay trackbacks

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Conectando a %s

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 64 seguidores

%d bloggers like this: