Facebook Twitter RSS Reset

A que no sabías estas cosas de Javascript?

A que no sabías estas cosas de Javascript?

Esta es una lista de enunciados para los que ya saben javascript básico, pero que les falta entender cuestiones más profundas del lenguaje.

La propuesta es dedicarle algo de tiempo a cada enunciado antes de ver las posibles respuestas, así se aprende mejor. Las respuestas las agrego en un rato… A que no sabías estas cosas de Javascript?
La semana que viene probablemente haga otro post con más ejercicios.

Para muchos de los ejercicios hay múltiples soluciones, no te conformes con la primera que encuentres, seguí buscando otras opciones.

A que no sabías estas cosas de Javascript?

1) Transitividad?

El operador “==” da problemas, y uno interesante es que no se respeta la transitividad.


 

var a = ... ;

var b = ... ;

var c = ... ;

console.log(a == b) ; // true

console.log(b == c) ; // true

console.log(a == c);  // false!?

 



El puzzle es completar las tres asignaciones iniciales, para obtener el comportamiento descrito.

A que no sabías estas cosas de Javascript?

2) Este se podría llamar “problema de identidad”

Este es un caso de borde, pero…


 var a = ... ;

console.log(typeof(a)); // "number"

console.log(a == a);    // false!?

console.log(a === a);   // false!?

 
Cuanto debería valer “a” para que pase esto?

ejercicios

3) “igualdad o no?”

Las variables numéricas tienen también cosas raras…


 var a = ... ;

var b = ... ;

console.log(a === b);     // true

console.log(1/a === 1/b); // false!?

 

El puzzle es completar las dos asignaciones para que se cumpla este comportamiento.

curiosidades

4) “Declaración múltiple”

Algunos programadores utilizan el estilo de abajo, e inicializan varias variables a la vez.


 var a = b = c = 0;

ejemplo();

console.log(a,b,c);

function ejemplo() {

    var a = b = c = 1;

    console.log(a,b,c);

}

 
Qué imprimirá el código dado? Por qué?

rarezas

5) ¿Por qué funciona?

El código de abajo parece no tener sentido, pero anda…


 for (x = 1; (x+1) !== x; x *= 2) {} ;  // no es esto un loop infinito?

for (y = 1; (x+y) === x; y *= 2) {} ;  // se ejecuta alguna vez este loop??

z = (x+y) - x;                         // no resulta ser z===y ???

for (t = u = 1; (1+t) !== 1; t /= z, u++) {} ; // otro loop infinito????

console.log(z, u);

 

¿Qué son los dos resultados que da este algoritmo?

Y ¿cómo es que funciona?? ¡Esta pregunta es difícil!

A que no sabías estas cosas de Javascript?

6) Cuestion de estilo

Algunos proyectos usan el estilo Allman de indentación, pero ello no debería hacer diferencia, ¿no?


 function hacerObjeto(a) 

{

    return     

    {

        atributo: a

    }

}

if (true)

{

    console.log(hacerObjeto(22));

}

 

¿Qué es el resultado del código de arriba? ¿Por qué?

javascript

7) Contra toda lógica

¿El “if” no funciona?


 if (true) {

    function func() { return "TRUE"; }

} else {

    function func() { return "FALSE"; } 




 } 

console.log(func()); // “FALSE” ?!?!?Por qué este resultado?

puzzle

8) ¿Todo en orden?

Este tipo de código es común:


 function func(param) {

    if (param === undefined) {

      ...

    }

    ...

}

 

¿Cómo podría fallar este código, y cómo se resolvería el problema?

ejercicios

9) Viajando en el tiempo…

Esta pregunta tiene algo de arqueología… el siguiente código solía tener un problema:


 En HTML:

BOTON

En un script:

function addClickHandler() {

    var element = document.getElementById("boton");

    element.click = function onClick(e) {

        ...

    }

}

addClickHandler();

 

¿Qué problema hay (o había)? Según lo que he estado viendo, en browsers modernos esto no es problema ya.

curiosidades

10) ¿Donde está Wally?



Es fácil ver que hace este código A que no sabías estas cosas de Javascript?, pero por que funciona? y cual es el resultado? A que no sabías estas cosas de Javascript?A que no sabías estas cosas de Javascript?


 ([]+/H/)[1&11>>1]+(+[[]+(1-~1<<1)+(~1+1e1)+(1%11)+(1|1>>1|1)+(~1+1e1)+(.1^!1)])[[([]+!![

11])[11^11]+[[{}]+{}][1/1.1&1][1]]+([[]+111/!1][+!1][([{}]+{})[1e1>>1]+[[],[]+{}][1&11>>

1][1|[]]+([]+[][111])[1&1]+[{},1e1,!1+{}][~~(1.1+1.1)][1^1<<1]+(11/!{}+{})[1-~1<<1]+[!!{
}+[]][+(11>11)][[]+1]+(/^/[1.11]+/&/)[.1^!1]+[{},[{}]+{},1][1&11>>1][1+1e1+1]+([]+!!{})[

.1^!1]+([]+{}+[])[[]+1]+[!!{}+{}][!11+!111][[]+1]]+[])[(!/~/+{})[1|1<<1]+[/=/,[]+[][1]][
1&11>>1][1&1>>1]+([]+{})[~~(1.1+1.1)]+[1,!1+{}][1%11][1^1<<1]+(111/[]+/1/)[~1+1e1+~1]+[!
!/-/+[]][+(11>11)][1]]((1<<1^11)+((+(1<1))==([]+/-/[(!![11]+[])[+!1]+(!!/-/+{})[1-~1]+([
]+!/~/)[1-~1]+(!!/-/+{})[!111+!111]])[11%11]),-~11>>1)](~1-~1e1<<1<<1)+([]+{111:1111}+[]
)[11111.1%11.1*111e11|!11]+({}+/W/)[1+~1e1-(~11*1.1<<1)]+(+[[]+(1|1>>1)+(1|1>>1|1)+(11-1

>>1)+(1e1>>1|1)+(1e1>>1)+(1>>11)+(11>>>1)])[[(!!{}+[])[11>>>11]+[[]+{}][.1^!1][111%11]]+

([11/[]+[]][111%111][([{}]+[{}])[1e1>>1]+[[],[{}]+[{}]][1|1>>1|1][1|[]]+([][11]+[])[[]+1

]+[{},1e1,![1]+/~/][1<>1]+[!!/-/+{}][+(111>111)][111%11]+

([][11]+/&/)[1&1>>1]+[{},[]+{}+[],1][[]+1][11-~1+11>>1]+([]+!!/-/)[11>>11]+([]+{})[1|1>>

1|1]+[[]+!!{}][1>>>1][1&11]]+[])[(!{}+[])[1^1<<1]+[/=/,[]+[][1]][1<<1>>1][!111+!111]+([]

+{}+[])[1<<1^1>>1]+[1,![11]+[]][1|1>>1][1|1<<1|1]+(11/[]+/1/)[-~11>>1]+[!![111]+{}][+[]]

[1|1>>1]]((1e1-1)+((1&1>>1)==([]+/-/[(!!{}+{})[+(1>1)]+(!!/-/+{})[1|1<<1]+(!1+{})[1|1<<1
|1]+(!!/-/+{})[11.11>>11.11]])[1&1>>1]),1-~1<<1)](~1-~1e1<<1<<1)+(/^!/+[])[1+!![11%111]]
 

rarezas

Aclaraciones:

La recopilación fue hecha por otra persona, yo solo la compagine y la compartí.

Espero que no se enoje.

Si quiere que lo nombre, lo hago, no creo que tenga usuario de Taringa.

Si quiere que borre el post, lo hago también.

Solo me pareció interesante y educativo para compartir…

No comments yet.

Leave a Comment