Notas del curso Programación avanzada con JavaScript y ECMAScript del Clúster Tic de Galicia.
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:
Bloque 1: JavaScript avanzado
Bloque 2: ECMAScript
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:
¿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?
setInterval, que está diseñado para esosetTimeout y estableciendo un nuevo setTimeout al final del código que se ejecuta (Correcto)
¿Es posible controlar mediante código el valor que toma la palabra clave this dentro de una función?
call y applysetContextthat”) gracias a las clausuras¿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).
new Date(); (Correcto)new Date(“mes día, año horas:minutos:segundos”); (Correcto)new Date(“dd/mm/yyy hh:mm:ss”);new Date(dia, mes, año);new Date(año, mes, dia); (Correcto)¿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)
arguments para acceder a los mismos (Correcto)parameters para acceder a los mismostypeof != undefined) (Correcto)overridesoverloads
¿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?
objeto.with(“propiedad”) devolviendo true en caso afirmativowith(miObjeto) { Metodo(); propiedad = 0} (Correcto)with (o=miObjeto) { n.Metodo(); n.propiedad = 0}¿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?
window)event que representa los datos del evento¿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?
currentTarget del eventothis, que siempre apunta al objeto que ha generado el eventotarget del evento (Correcto)
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?
window.rootdocument.rootdocument.documentElement (Correcto)window.html¿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?
getElementByIdgetElementsByTagNamequerySelectorAll (Correcto)getElementsByName¿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.
Map como una colección clave-valor es menos eficiente que usar un objeto literal, pero el primero tiene más funcionalidadSi 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; }
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?
for de 0 hasta array.lengthfor de 0 hasta array.length - 1 (Correcto)for de 1 hasta array.lengthforeachfor-infor-of (Correcto)¿Es posible comprobar varios casos en una sola instrucción case en una estructura de control de flujo de comprobación de casos?
case 1, 2, 3:case 1-3:case (x>=0 || x⇐5):switch(true) y luego usando condiciones lógicas, pero posee limitaciones (Correcto)
¿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]?
for(var i= 0; i< miMatriz.length; i++) (Correcto)for(var i= 0; i⇐ miMatriz.length; i++)for(var i= 1; i< miMatriz.length; i++)for(var i= 1; i⇐ miMatriz.length; 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?
push y pullpush y popslice y spliceunshift y shift (Correcto)
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?
f le has pasado el objeto obj en lugar del proxy p como parámetro (Correcto)¿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?
setInterval, que está diseñado para esosetTimeout y estableciendo un nuevo setTimeout al final del código que se ejecuta (Correcto)