Introducción al curso

1

¡Alto! Tenemos una nueva versión de este curso para ti

2

Bienvenidos al Curso de Fundamentos de JavaScript

3

Repositorio de este curso de fundamentos de JS

Primeros pasos en JavaScript

4

Variables

5

Variables: Strings

6

Variables: Números

7

Funciones

8

El alcance de las funciones

9

Objetos

10

Desestructurar objetos

11

Parámetros como referencia o como valor

12

Comparaciones en JavaScript

Estructuras de Control y Funciones

13

Condicionales

14

Funciones que retornan valores

15

Arrow functions

16

Estructuras repetitivas: for

17

Estructuras repetitivas: while

18

Estructuras repetitivas: do-while

19

Condicional múltiple: switch

Arrays

20

Introducción a arrays

21

Filtrar un array

22

Transformar un array

23

Reducir un array a un valor

Programación Orientada a Objetos en JavaScript

24

Cómo funcionan las clases en JavaScript

25

Modificando un prototipo

26

El contexto de las funciones: quién es this

27

La verdad oculta sobre las clases en JavaScript

28

Clases en JavaScript

Asincronismo

29

Funciones como parámetros

30

Cómo funciona el asincronismo en JavaScript

31

Cómo funciona el tiempo en JavaScript

32

¿Qué pasó con swapi.co?

33

Callbacks

34

Haciendo múltiples requests

35

Manejando el Orden y el Asincronismo en JavaScript

36

Manejo de errores con callbacks

37

Promesas

38

Promesas Encadenadas

39

Múltiples promesas en paralelo

40

Async-await: lo último en asincronismo

Juego de HTML

41

Comenzando el juego

42

Generando una secuencia de números

43

Iluminando la secuencia de colores

44

Obteniendo el input del usuario

45

Agregando la verificación del color elegido

46

Agregando los estados finales del juego

47

Conclusiones del curso

Complementos

48

Diferencias entre var, let y const

49

Memoización: ahorrando cómputo

50

¿Hace cuántos días naciste?

51

Funciones recursivas

52

Entiende los closures de JavaScript

53

Estructuras de datos inmutables

54

Cambiando de contexto al llamar a una función

55

¿Cuándo hace falta poner el punto y coma al final de la línea?

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Conclusiones del curso

47/55
Recursos

Felicitaciones, ya tienes unas bases sólidas para continuar aprendiendo frameworks más avanzados basados en JavaScript.

Aportes 422

Preguntas 5

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

pues Excelente la parte donde enseña lo básico ósea me refiero a las primeras clases, pero los tutoriales del juego simón dice y el asincronismo no lo entendí muy bien, me quede con tantas dudas que la verdad no se que hacer y como responder a los demás cursos y eso es lo que me preocupa mucho 😥, no se ustedes pero espero con el tiempo comprender todo lo que hizo sacha en el proyecto de Simón dice o díganme compañeros que aconsejan, quiero ver sus mensajes motivadores.

Un curso largo, doloroso pero súper necesario!

Mi pequeño aporte una pequeña animación

.celeste, .violeta, .naranja,.verde{
          transition: .2s ease-out;
      }
      .celeste.light, .violeta.light, .naranja.light, .verde.light{
        animation: aumentar .3s ease-out;
      }
      @keyframes aumentar{
          0%{
              transform: scale(0.95)
          }
          100%{
              transform: scale(1.03)
          }
      }

Muy buen curso aunque hubo temas que me explotaron la cabeza hehe pero allí vamos de a poco.

Muy buen curso. Me gusto. Aun tengo miedito de no usar todo este conocimiento y se me olvide pero se que debo ponerlo en practica a pesar de que me cuesta bastante; aun asi este curso me motiva a seguir, antes ni dos lineas de codigo escribia jeje.

gracias por todas las enseñanzas sacha, muy buen curso.

Al comienzo me costó mucho, no entendía muy bien, hice hasta la mitad del curso y lo detuve, luego salió el de JS básico. lo hice y volví a empezar este, poco a poco fui entendiendo hasta que lo completé, excelente curso, recuerden en ocasiones hay temas difíciles, vale la pena tener paciencia y perseverar, saludos! 😃

Aprendí mucho. Gracias al profesor Sacha, por lograr explicar de una manera dinánimca, y “coloquial”, para los “primerizos”. Agradezco, a toda la comunidad de Platzi, por ayudarme (cuando tenía problemas con el código).
Ahora, a seguir aprendiendo, y ayudar a la comunidad (como me ayudaron a mí).

El curso me parecio bastante bueno e interesante, haaasta que llegamos a asincronismo, una vez entrando a este apartado, ya comenzo a ser todo mas complejo, creo que fue tocado bastante por encima el tema.
Ojala mientras avance en el curso de js, expliquen mas a profundidad estos temas ya que no me han quedado muy claros. Si no, a volver a ver el curso.
Muchas gracias, excelente profe!

Excelente curso, muy bien explicado y todo muy claro. Como mejora propondría que previo a resolver el problema, primero se definan los pasos, ya que permitiría conocer la lógica antes del código.

aquí pongo mi código del reto, no es la gran cosa me tarde 2 días en lograrlo y me di cuenta que debo volver a html y css porque me falta mucho de maquetacion web.

y acá una imagen de como se ve.

const rojo = document.getElementById('rojo')
const azul = document.getElementById('azul')
const naranja = document.getElementById('naranja')
const verde = document.getElementById('verde')
const btnEmpezar = document.getElementById('btnEmpezar')
const level = document.getElementById('level')
const ULTIMO_NIVEL = 10

function empezarJuego(){
    window.juego = new Juego()
}

class Juego {
    constructor(){
        this.inicializar = this.inicializar.bind(this)//bind(this) atamos this a la funcion para que siempre que se llame this.inicializar this sea la clase juego
        this.cuentaRegresiva()
        /* this.generarSecuencia() */
    }

inicializar(){
    this.siguienteNivel = this.siguienteNivel.bind(this)
    this.elegirColor = this.elegirColor.bind(this)
    this.toggleBtnEmpezar()
    this.nivel = 1
    this.colores = {
        rojo,
        azul,
        naranja,
        verde
    }
}

toggleBtnEmpezar(){
    if(btnEmpezar.classList.contains('hide')){
        btnEmpezar.classList.remove('hide')
        btnEmpezar.textContent = 'Empieza capullo!'
    }else{
        btnEmpezar.classList.add('hide')
    }
}

generarSecuencia(){
    this.secuencia = new Array(ULTIMO_NIVEL).fill(0).map(n => Math.floor(Math.random() * 4))
}

siguienteNivel(){
    this.subnivel = 0
    this.iluminarSecuencia()
    this.agregarEventosClick()
}

iluminarSecuencia(){
    for(let i = 0; i < this.nivel; i++){
       let color = this.transformarNumeroAColor(this.secuencia[i]) 

       setTimeout( () => this.iluminarColor(color), 800 * i)
    }
}

iluminarColor(color){
    this.colores[color].classList.add('light')

    setTimeout( () => this.apagarColor(color), 400)
}

apagarColor(color){
    this.colores[color].classList.remove('light')
}

transformarNumeroAColor(num){
    switch(num){
        case 0: 
             return 'rojo'
        case 1: 
             return 'azul'
        case 2: 
             return 'naranja'
        case 3: 
             return 'verde'    
    }
}

transformarColorANumero(color){
    switch(color){
        case 'rojo': 
             return 0
        case 'azul': 
             return 1
        case 'naranja': 
             return 2
        case 'verde': 
             return 3    
    }
}

agregarEventosClick(){
    for(let btnColor in this.colores){
        this.colores[btnColor].addEventListener('click', this.elegirColor)        
    }
}

eliminarEventosClick(){
    for(let btnColor in this.colores){
        this.colores[btnColor].removeEventListener('click', this.elegirColor)
    }
}

elegirColor(ev){
    const nombreColor = ev.target.dataset.color 
    const numeroColor = this.transformarColorANumero(nombreColor)
    this.iluminarColor(nombreColor)
    if(numeroColor === this.secuencia[this.subnivel]){
        this.subnivel++
        if(this.subnivel === this.nivel){
            this.nivel++
            this.eliminarEventosClick()
            this.nivelActual(this.nivel)
            if(this.nivel === (ULTIMO_NIVEL + 1)){
                this.ganoJuego()
                this.nivelActual(ULTIMO_NIVEL);
            }else {
                setTimeout(this.siguienteNivel, 1000)
            }
        }      
    }else {
        this.perdioJuego();
        this.nivelActual(1);
    }
}

ganoJuego() {
    swal('Jhonander dice', 'Enhorabuena jilipollas los has logrado!', 'success')
    .then(this.inicializar)
}

perdioJuego() {
    swal('Jhonander dice', 'la has cagado capullo!', 'error').then(() => {
        this.eliminarEventosClick()
        this.inicializar()
    })
}    

nivelActual(num){
    level.textContent = `Nivel: ${num}`
}

cuentaRegresiva(){
    let j = 0
    let time
    for(let i = 3; i >= 0; i--){
        while(j <= 3 ){
            j++
            time = j - 1
            break
        }
        setTimeout(() => {
            btnEmpezar.classList.add('btn-start-count')
            btnEmpezar.textContent = i
            if(i === 0){
                btnEmpezar.classList.remove('btn-start-count')
                this.inicializar()
                this.generarSecuencia()
                setTimeout(this.siguienteNivel, 500)
            }
        }, 1000 * time)
    }
}



}

Gracias Sacha, buen curso, muy bien explicado el curso, ahora a poner en practica lo aprendido y por supuesto, nunca parar de aprender.

Genial, el curso me encanto.Solo que hay muchos conceptos que aun no me quedan claros por lo tanto seguiré investigando y practicando.

Hola comunidad, una pregunta, hay algún curso donde se enseñe como interactuar más con el DOM, como hacer animaciones etc?
Agradecería la respuesta y si no es así, que fuentes puedo consultar para eso.
Muchas gracias!

Estuvo súper. Debo decir que me costó bastante esfuerzo y tuve que repetir varias clases, varias veces, pero esa es la idea, hacerlo hasta aprender. No me la creo que haya hecho todo este recorrido. Ahora, lo que falta… 😃

Si no le entendieron mucho a la primera, esperen 1 semana y vuelvan a verlo, se les hace mucho más corto y lo entienden mucho mejor ❤️

Igualmente recien hice el examen y me parece que podria ser mejor en cuanto a evaluar los contenidos que se vieron y comprobar si realmente aprendi. Los examenes se vuelven bastante repetitivos preguntando lo mismo varias veces, punto a mejorar. Aunque el curso estuvo de 10

Increíble!!! Vamos por React!

Muy buen curso, yo estaba dudando en tomarlo debido a que ya he trabajado como desarrollador. Pero hubo algunos muy buenos conceptos que la verdad desconocia totalmente (esencialmente Promises). Siento que valio mucho la pena hacer este curso y me llevo muy buenas herramientas para mi futuro. Muchas gracias Sacha!!!

Muy genial 😄
Hasta por fin lo pude terminar. espero avanzar mucho en mis conocimientos

Éste es, fácilmente, uno de los mejores cursos que he hecho en la plataforma. A pesar de lo denso, el profesor lo hace muy agradable y a buen ritmo.

Maestro, excelente

Excelente curso. Además de tener un profesor muy profesional y preparado!

Esta genial el curso, se ha aprendido bastante 😃

Este curso es fascinante!

Muy bueno y aunque hubo cosas difíciles de entender se siente muy satisfactorio conseguir completar el juego y lograr entender todo, ahora lo siguiente es mejorar el juego 😄
Gracias Sacha!!!

El curso está buenísimo, super feliz. Muchísimas gracias!!

Sacha, sos un crack! Saludos desde Tucu!

Buen curso!
jQuery allá vamos!

El curso me pareció bien, el tema es difícil por lo que para alguien que comienza desde cero como yo, definitivamente hay que dedicarle tiempo para profundizar más.

El proyecto creo que fue un poco rápido, y se usaron conceptos que no aprendimos en las clases como el "bind"o "target por mencionar algunos. Me dió la impresión que no fue tan planificado como el resto del curso.

Un curso excelente y un muy buen profesor, muchas gracias Sacha

Muy interesante el curso, muchas gracias, Se aclararon muchos conceptos importantes.

Super bien, hacia cosas con javascript pero muchas cosas de las que utilizaba no sabía porque se usaban así y aprendí el por qué de las cosas.

Buen profesor y buen curso!

Definitivamente un excelente curso

Buen curso, se aprenden las nociones básicas de Javascript.

Genia, muy buen curso…

Excelente curso mi gusto

Sacha! Muchas gracias, excelente curso. Sin duda unas buenas bases para iniciar con React 😉

Excelente curso.

Muy buen curso, aquí dejo mi aporte donde agregué mostrar texto con el número de nivel y sonido cada vez que se ilumina un botón de color.

index.html

<!DOCTYPE html>
<html>

<head>
	<meta charset="utf-8">
	<title>Simon Dice</title>
	<link rel="stylesheet" type="text/css" href="styles/styles.css">
</head>

<body>
	<div class="gameboard">
		<div id="celeste" class="color celeste left" data-color="celeste" data-sound="tick"></div>
		<div id="violeta" class="color violeta right" data-color="violeta" data-sound="tick"></div>
		<div id="naranja" class="color naranja left" data-color="naranja" data-sound="tick"></div>
		<div id="verde" class="color verde right" data-color="verde" data-sound="tick"></div>
		<button id="btnEmpezar" class="btn-start" onclick="empezarJuego()">Empezar a jugar!</button>
	</div>
	<div class="nivel">
		<span>Nivel:</span><span id="numero-nivel">1</span>
	</div>
	<audio id="tick" src="https://raw.githubusercontent.com/wesbos/JavaScript30/master/01%20-%20JavaScript%20Drum%20Kit/sounds/tink.wav"></audio>

	<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/sweetalert/2.1.2/sweetalert.min.js"></script>
	<script type="text/javascript" src="scripts/gameplay.js"></script>
</body>

</html>

styles.css

body {
    margin: 0;
    background: #050423;
    display: flex;
    align-items: center;
    height: 100vh;
}

.gameboard {
    height: 100vh;
    width: 100vw;
    border-radius: 50%;
    overflow: hidden;
    margin: 0 auto;
    max-height: 60vh;
    max-width: 60vh;
}

.color {
    width: 50%;
    height: 50%;
    display: inline-block;
}

.left {
    float: left;
}

.right {
    float: left;
}

.celeste {
    background: #22a6b3;
}

.celeste.light {
    background: #7ed6df;
}

.violeta {
    background: #be2edd;
}

.violeta.light {
    background: #e056fd;
}

.naranja {
    background: #f0932b;
}

.naranja.light {
    background: #ffbe76;
}

.verde {
    background: #6ab04c;
}

.verde.light {
    background: #badc58;
}

.btn-start {
    width: 400px;
    height: 100px;
    background: #ecf0f1;
    color: #2c3e50;
    font-size: 2.5rem;
    position: absolute;
    top: calc(50% - 50px);
    left: calc(50% - 200px);
}

.hide {
    display: none;
}

.nivel {
    position: absolute;
    top: 50px;
    right: 50px;
    color: #d0b217;
    font-size: 2.5em;
}

#numero-nivel {
    margin-left: 20px;
}

* {
    font-family: 'Helvetica';
}

gameplay.js

const celeste = document.getElementById('celeste');
const violeta = document.getElementById('violeta');
const naranja = document.getElementById('naranja');
const verde = document.getElementById('verde');
const btnEmpezar = document.getElementById('btnEmpezar');
const audio = document.getElementById('tick');
const ULTIMO_NIVEL = 3;

class Juego {
    constructor() {
        this.inicializar = this.inicializar.bind(this);
        this.inicializar();
        this.generarSecuencia();
        setTimeout(this.siguienteNivel, 500);
    }

    inicializar() {
        this.toggleBtnEmpezar();
        this.siguienteNivel = this.siguienteNivel.bind(this);
        this.elegirColor = this.elegirColor.bind(this);
        this.nivel = 1;
        this.colores = {
            celeste,
            violeta,
            naranja,
            verde
        }
    }

    toggleBtnEmpezar() {
        if(btnEmpezar.classList.contains('hide')) {
            btnEmpezar.classList.remove('hide');
        } else {
            btnEmpezar.classList.add('hide');
        }
    }

    generarSecuencia() {
        this.secuencia = new Array(ULTIMO_NIVEL).fill(0).map(n => Math.floor(Math.random() * 4));
    }

    siguienteNivel() {
        document.getElementById('numero-nivel').innerHTML = this.nivel;
        this.numeroNivel = this.nivel;
        this.subNivel = 0;
        this.iluminarSecuencia();
        this.agregarEventoClick();
    }

    transformarNumeroAColor(num) {
        switch(num) {
            case 0:
                return 'celeste'
            case 1:
                return 'violeta'
            case 2:
                return 'naranja'
            case 3:
                return 'verde'
        }
    }

    transformarColorANumero(color) {
        switch(color) {
            case 'celeste':
                return 0
            case 'violeta':
                return 1
            case 'naranja':
                return 2
            case 'verde':
                return 3
        }
    }

    //usamos let en vez de var, para mantener el scope de la variable dentro del ciclo en cada iteración
    iluminarSecuencia() {
        for (let i = 0; i < this.nivel; i++) {
            let color = this.transformarNumeroAColor(this.secuencia[i]);
            setTimeout(() => this.iluminarColor(color), 1000*i);
        }
    }

    iluminarColor(color) {
        this.colores[color].classList.add('light');
        audio.play();
        setTimeout(() => this.apagarColor(color), 450);
    }

    apagarColor(color) {
        this.colores[color].classList.remove('light');
    }

    agregarEventoClick() {
        this.colores.celeste.addEventListener('click', this.elegirColor);
        this.colores.verde.addEventListener('click', this.elegirColor);
        this.colores.violeta.addEventListener('click', this.elegirColor);
        this.colores.naranja.addEventListener('click', this.elegirColor);
    }

    eliminarEventoClick() {
        this.colores.celeste.removeEventListener('click', this.elegirColor);
        this.colores.verde.removeEventListener('click', this.elegirColor);
        this.colores.violeta.removeEventListener('click', this.elegirColor);
        this.colores.naranja.removeEventListener('click', this.elegirColor);
    }

    elegirColor(e) {
        const nombreColor = e.target.dataset.color;
        const numeroColor = this.transformarColorANumero(nombreColor);
        this.iluminarColor(nombreColor);
        audio.play();
        if (numeroColor === this.secuencia[this.subNivel]) {
            this.subNivel++;
            if (this.subNivel === this.nivel) {
                this.nivel++;
                this.eliminarEventoClick();
                if (this.nivel === (ULTIMO_NIVEL + 1)) {
                    this.juegoGanado();
                } else {
                    setTimeout(this.siguienteNivel, 1500);
                }
            }
        } else {
            this.juegoPerdido();
        }
    }

    juegoGanado() {
        swal('Sigue los colores', 'Ganaste el juego, felicitaciones!', 'success')
            .then(this.inicializar);
    }

    juegoPerdido() {
        swal('Sigue los colores', 'Lo sentimos, perdiste!', 'error')
            .then(() => {
                this.eliminarEventoClick();
                this.inicializar();
            });
    }
}

function empezarJuego() {
    var juego = new Juego();
}

Felicidades a todos los que llegaron a aquí!

Muy buen curso!
Ya tenia pocos conocimientos, pero ahora me pude afianzar mas promesas, async-await, y mucho mas!

Gracias!!!

Buen profe, todo re claro!!!
Solo queda practicar y practicar!

He estado con mucho trabajo pero haciendo tu curso he tenido momentos bastante amenos por las noches, gracias por tus clases me he actualizado con respecto al mundo javascript. Espero sigas en Platzi desarrollando nuevos cursos.

Gracias por el curso, voy a seguir aprendiendo.

El curso fue excelente y espero utilizar esto como base para mi carrera de front end

Excelente curso Sacha!!! Muchas gracias!!! Tu manera de explicar los temas entre el curso y el anterior ha crecido!!! Excelente!!! Muchas gracias de nuevo!!

excelente curso!

Muy buen curso.

Excelente el curso. Muy buenas bases. Aunque en el desarrollo del juego, me perdí bastante pero siento que repasando las clases previas y tomandome mi tiempo en el codigo del juego, puedo comprenderlo.

¡Muy bueno el curso!
El apunte: vídeos muy cortos lo que hace que uno no se agote.
Lo mejor: La explicación de callbacks y promesas por el profe.
El premio: Realizar un juego en JavaScript

Buen curso para fortalecer las bases de javascript, a seguir con React y React Native, gracias profe!!

Estuvo bastante completo, quise ver el curso aunque ya conozco Javascript y vi buenos conceptos que no estaba manejando. La metodología del juego me encantó.

Muy buen curso, me gusta el detenimiento con el que el profesor explica las clases y los ejemplos tan básicos pero a la vez prácticos que usa para usar cada característica del lenguaje.

muy bueno el curso, aun me falta reforzar algunos conceptos para eso a practicar!

Curso de calidad, y un buen ritmo de aprendizaje. Lo único que hecho en falta sería el desarrollo de más proyectos para poner en práctica, retos o sugerencia de proyectos que se pueden desarrollar con los conocimientos actuales. Ahora nuestro reto es saber cuando aplicar cada conocimiento aprendido.

VAMOSSS, no pensé que me iba a emocionar tanto ver este video final, jajaja.

Excelente curso! Lo hice para repasar conocimientos y terminé aprendiendo y recordando más de lo esperado!

Excelente curso, eres un Crack.
Tengo que practicar bastante para llegar a los conocimientos que tienes.

Gracias Sacha, la verdad es que soy mejor ahora de que cuando comencé el curso. voy a seguir practicando más.

Hola! Siento que debo ser 100% honesta. Me concibo como alguien bastante ignorante para esto del desarrollo, sobretodo en muchos de sus conceptos más básicos/elementales… Hace mucho tenia la idea en mi cabeza de empezar a aprender pero no me había animado sino hasta ahora… estuve investigando bastante antes de empezar y según varios consejos, una de las mejores formas de iniciar en el proceso para aprender a desarrollar es teniendo bases de JS, por su versatilidad, entre otros aspectos más. Como varios de los compañeros, me gusto mucho la posibilidad que tuvimos de practicar lo aprendido en algunas de las clases de la primera parte del curso… sin embargo, quede bastante perdida desde la sección de asincronismo y mucho más confundida en la sección de la elaboración juego. Creí que el juego seria un excelente medio y oportunidad para aclarar posibles dudas que tenia y poner en practica lo aprendido pero realmente no sentí que pudiese reforzar, corroborar y/o aclarar lo visto en las primeras clases, mas bien me confundí mucho mas… A este momento quizás también puedo decir que no me siento suficientemente preparada/lista para seguir avanzando en otros frameworks aun… Soy docente de otra área del saber totalmente ajena a este campo y por otros estudios que he realizado, sé que como en muchos otros campos del saber, también existen metodologías y enfoques para la enseñanza de la Programación. Siento que quizás tener un poco de conocimiento acerca de estos enfoques podría ser útil para que los que somos totalmente novatos e ignoramos hasta las cosas mas obvias o elementales (para aquellos que ya tienen algunas bases) podamos animarnos a aprender sin sentirnos tan frustrados, confundidos y hasta incapaces de seguir. Soy totalmente consciente que para entender, aprender y apropiarnos de conocimiento nuevo en cualquier ámbito es necesaria la confusión y la frustración, pero también por experiencia propia también se que siempre es posible mejorar y estar abierto a potencializar nuestras practicas y maneras de enseñar. Este comentario no esta escrito con el animo de ofender a nadie, ni atacar, sino de dar observaciones para mejorar. Gracias por darnos herramientas para comenzar a aprender.

Lo que más quedo del curso fue la palabra “prolijo”.

@SachaLifszyc eres uno los mejores profesores que me ha tocado, gracias!

Muy bueno el curso, muchas cosas nuevas por aprender

curso maravilloso, gracias!

Excelente curso, aprendí un monton y lo que me falta.
Saludos.

Excelente Curso Sacha, felicidades!

Bueno profe muchas gracias por esta clase, fue muy productiva, algunos temas aun por profundizar y probar.

Se le agradece el esfuerzo realizado por explicar esto de la mejor forma y con el mejor animo posible.

De los mejores instructores !!

Excelente, muchas gracias por el curso

Gracias 😄 Excelente Curso 😃

tengo que reiniciar este curso

Excelente Profesor, muy claras las clases.

muy buen curso, muy agradecido con Sacha y todo el team Platzi!!!

Gracias por tu conocimiento Sasha , quiza hay muchas cosas que tenga que practicar para enteder mas , pero siento un gran progreso con el curso.

Sacha, muy bien curso. Me gustó mucho.

Muy bueno el curso. Sin embargo, creo que debo seguir practicando con mas ejercicios hasta dominarlos. Seguir complementandolos con otros cursos. Gracias Sacha.

el curso fue muy bueno ya tenia algo de conocimientos. pero aprendí cosas nuevas que no sabia, consolide otro conocimientos gracias por el curso

Hasta el modulo 4 iba perfecto, desde ahí no se que es lo que me paso y tampoco como es que llegue hasta aquí.
Lo vuelvo a empezar…

Muy buen curso, excelentes explicaciones ejemplos y practicas, felicito en especial a Sacha por la mejora del anterior fundamentos al actual realmente bueno, Gracias.

El mejor curso que he tomado hasta el momento :’)

Tengo una duda, estaba usando innerHTML y me sale este error: Uncaught TypeError: Cannot read property ‘innerHTML’ of null
at prueba.js:41
Aqui esta el codigo HTML

<body>
    <div class="box" id="ya">
        <a href="eproduct.html">
            <img src="./imagenes/products/3.png" alt="productos" height="250" width="200">
        </a>
    </div>
</body>

y en javascript

document.getElementById("ya").innerHTML +='<h6><strong>Hola</strong> <br>que tal</h6>';

Según leí en algún post sobre este error, se da comunmente porque la secuencia de datos esta en la cabecera del html, es decir que añado js en el head del html, y cuando la variable intenta encontrar getElementById(“ya”) la variable id aun no existe, por lo que sale ese error, de que manera puedo solucionar para que no salga mas este error? ya que si hago este código si me funciona:
Solo dentro del html

<body>
    <div class="box" id="ya">
        <a href="eproduct.html">
            <img src="./imagenes/products/3.png" alt="productos" height="250" width="200">
        </a>
    </div>
    <script>
        document.getElementById("ya").innerHTML +='<h6><strong>Hola</strong> <br>que tal</h6>';
    </script>
</body>

Pero lo que quiero es validar que todos los id del html ya esten creados correctamente para ser usado en un archivo javascript externo, agradecería muchísimo su ayuda.

Muy buen curso, lo utilicé para repasar los fundamentos de js.

Muy buen curso,en el juego lo senti un poco dificl realizar sin la ayuda del profesor pero me gusto el reto!

gracias profe usted es lo máximo!

¿Hola a todos; existe un repositorio con el codigo completo de este curso?

Muchas gracias profesor Sacha Lifszyc, Excelente curso!! 👍

Es uno de los mejores cursos que he hecho en esta plataforma, en especial por la forma tan sencilla en la que explicas temas complejos.

Muy bueno el curso. solo por este curso ya hice valer el mes de platzi jaja

Sacha me ha encantado este curso de Fundamentos de JS.
Ameno y muy bien explicado, mi más sincera enhorabuena. Chapo!

excelente!!!

Excelente !!!

Muy buen curso para el entrar en el mundo de JS, emocionado por el que viene.

Buen curso

Excelente Curso!!! a seguir aprendiendo!!

Buen curso, Sasha te da muy buenas bases para lo que sigue sea tanto front como back, seguro tendre que volver pero me voy con buenos conocimientos, gracias.

Excelente, la verdad le tenia un poco de fastidio a javascript pero la forma en que lo explicaste genial, muchas gracias

Después de leer varios comentarios me identifico con algunos compañeros, pensé era el único. jajá. Que animo, ya pensaba en tirar Js.

En conclusión el profesor es excelente, solo que como dije antes considero el curso es un ladrillo duro de comer para uno que comienza a hacer la carrera de Js, Tiene de todos los niveles, como el juego de 1 a 10…jaja, lo cual puede generar desmotivación en estudiantes que apenas comienzan a programar o que retornamos a la programación como es mi caso.

Sacha sos grande! Espero con el tiempo y la practica llegar a las grandes ligas como vos…

Buen curso!! pero no hay que dormirse, debo seguir aprendiendo.