Tabla de Contenidos

Programación avanzada con JavaScript y ECMAScript

Notas del curso Programación avanzada con JavaScript y ECMAScript del Clúster Tic de Galicia.

Objetivos

JavaScript es un lenguaje que engaña mucho. Lo básico es muy sencillo y se aprende rápido, pero después presenta gran cantidad de complicaciones. Hay quien llega a odiarlo y le parece un mal lenguaje, pero muchas veces es simplemente porque no se conoce a fondo y no se entiende bien su funcionamiento.

En este completo curso de más de 300 lecciones, dominarás hasta el último detalle de JavaScript, incluyendo las características más recientes del lenguaje. Con él te convertirás sin duda en un mejor profesional de la web. Aprenderás, entre otras muchas cosas:

Temario

Bloque 1: JavaScript avanzado

Bloque 2: ECMAScript

Introducción

JavaScript es un lenguaje que engaña mucho. Lo básico es muy sencillo y se aprende rápido, pero después presenta gran cantidad de complicaciones. Hay quién llega a odiarlo y le parece un mal lenguaje, pero en muchos casos es debido a que no se conoce a fondo y no se entiende bien su funcionamiento.

Por otro lado, muchos de los usuarios habituales de bibliotecas como jQuery y similares saben utilizarlas pero desconocen las bases sobre las que se sustentan. Por ello, cuando aparece un error o pasan cosas “extrañas” carecen de los conocimientos necesarios para diagnosticar y solucionar el problema.

Para programar a un nivel profesional con JavaScript es indispensable tener ciertos conceptos clave muy claros, o acabaremos con programas llenos de problemas, difíciles de mantener, que interfieren con las bibliotecas de otros, y que no funcionan bien en todos los navegadores.

En esta primera parte del curso vamos a meternos a fondo en JavaScript (ECMAScript 5).

Es probable que algunas de las cuestiones que se comentan ya las conozcas, pero en cualquier caso te vendrá bien repasarlas y seguro que hay detalles que desconocías o no tenías claros. Y como se suele decir, “El demonio está en los detalles”, y son precisamente éstos los que a veces marcan la diferencia entre un buen código y uno del montón o en comprender bien por qué falla un determinado código o por qué se comporta de manera “extraña”.

A través de 9 completos módulos y más de 150 detalladas lecciones, en esta parte del curso aprenderás entre otras muchas cosas:

Evaluaciones

Conceptos fundamentales avanzados de JavaScript

¿Cómo podrías conseguir que un código se ejecutase a intervalos regulares de tiempo, entre ejecuciones completas, con toda certeza y sin que se pierdan o se retrasen ejecuciones, incluso aunque estos intervalos fuesen cortos y el proceso largo?

¿Es posible controlar mediante código el valor que toma la palabra clave this dentro de una función?

¿De qué maneras puedes definir una nueva fecha válida en JavaScript y obtener el resultado esperado según sus parámetros? Es decir, todas estas opciones devuelven una fecha porque JavaScript es muy laxo con todos los tipos, pero no todas devuelven la fecha esperada (marca todas las correctas).

¿Qué obtendríamos en la variable res al final de este código?:

var n1 = 1;
var n2 = "1";
var res = (n1 === n2);

Cuando llamas al método sort de una matriz ¿qué efecto tiene éste sobre la misma?

¿Cuál es el resultado de esta operación?: 3+2+"5"

¿Cómo se puede conseguir la sobrecarga de funciones en JavaScript (funciones con el mismo nombre pero diferente número de argumentos)? (marcar todas las correctas)

¿Para qué sirve la instrucción instanceof?

¿Qué hace el siguiente código JavaScript?:

var res = "";
var i = 0;
 
for (;;){
    res += i
    i++;
    if (i>9) break;
}

¿Para qué sirve la palabra clave with de JavaScript?

Manejo del navegador y AJAX

¿Cuáles son las principales ventajas de usar el BOM para desarrollo web? (marca todas las correctas)

Cuando tienes una función que está trabajando como manejador de un evento, ¿qué referencia contendrá la variable “this” al utilizarla desde dentro del manejador?

¿De qué manera es posible obtener siempre una referencia al objeto que ha generado el evento en un manejador de eventos siguiendo el modelo del DOM?

OJO, estas tres propiedades nos dan esta información cuando se el evento se captura en el elemento que lo ha producido, pero solo target nos da una referencia cuando se captura en un elemento superior o inferior de la jerarquía.

¿Cuál es la propiedad del DOM que nos devuelve una referencia al elemento raíz de la página, es decir, al que representa a la etiqueta del código fuente HTML de la página actual?

¿Cuál de los siguientes métodos de selección de elementos del DOM devuelve una colección estática y no una colección “viva” de elementos?

ECMAScript fundamental

¿Cuáles son los estados posibles de una promise? (selecciona las correctas)

¿Qué diferencia hay entre JSON y la notación de objeto? (Marca todas las correctas) (selecciona las correctas)

El método then… (marca todas las afirmaciones correctas)

Rellena los huecos con las siguientes palabras (sin comillas): “menos”, “Map”, “más”, “objeto literal”, “clave”, “valor” Una de las palabras anteriores es erronea.

Si declaro una variable con const me aseguro de que…

const solo evita reasignar la variable. const NO asegura immutabilidad. El siguiente código es válido (y el objeto muta):

const a={v:42}; 
a.v = 666; 

const NO asegura que el valor sea conocido en tiempo de parsing del fichero:

const a = (function() { 
    return math.random();
})(); 

En este ejemplo DEBE ejecutarse la función anónima para obtener el valor de a

const puede contener cualquier tipo de valor. Eso es completamente válido:

const a = function(n) { 
    return 'hello ' +n;
}

Evaluación final

En el siguiente código:

var saludo = "Hola";
function miFuncion() {
alert(saludo);
saludo = "Adios";
}
miFuncion();
alert(saludo);

¿Qué se muestra por pantalla? ¡Fíjate muy bien en el código y no hagas trampa ejecutándolo ;-)!

¿Cómo puedes iterar sobre todos los valores de un array?

¿Es posible comprobar varios casos en una sola instrucción case en una estructura de control de flujo de comprobación de casos?

¿Cómo recorrerías los elementos de una matriz usando para ello un bucle determinado y accediendo directamente con la variable contador del bucle, por ejemplo miMatriz[i]?

¿Puede una variable contener un generador?

Cuando tienes una función que está trabajando como manejador de un evento, ¿qué referencia contendrá la variable this al utilizarla desde dentro del manejador?

El método sort de las matrices sirve para:

¿Qué métodos se utilizan para insertar y quitar elementos del principio de una matriz, creando en la práctica una pila FIFO o cola?

Has creado un proxy p, sobre un objeto obj. Dicho proxy intercepta las llamadas a propiedades. Tienes una función f, que recibe el objeto por parámetro y que llama a una propiedad prop del objeto, pero el proxy no intercepta nada. ¿Qué puede estar pasando?

¿Cómo podrías conseguir que un código se ejecutase a intervalos regulares de tiempo, entre ejecuciones completas, con toda certeza y sin que se pierdan o se retrasen ejecuciones, incluso aunque estos intervalos fuesen cortos y el proceso largo?