JavaScript es un lenguaje de programación muy tolerante a fallas y muchas expresiones que no son legales en otros lenguajes de programación funcionarán bien en JavaScript.
Esto da como resultado una gran cantidad de código extraño. ¿Quieres desafiarlo?
En este desafío, se te presentarán 20 expresiones extravagantes y se te pedirá que adivines su resultado.
1.
verdadero + falso
2.
**1.**
3.
[1, 2, 3] + [4, 5, 6]
4.
0.2 + 0.1 === 0.3
5.
10,2
6.
!!""
7.
+!![]
8.
verdadero == "verdadero"
9.
010 - 03
10.
"" - - ""
11.
nulo + 0
12.
0/0
13.
1/0 === 10 ** 1000
14.
verdadero++
15.
"" - 1
16.
(nulo - 1) - "1"
17.
38 * 4343 * 2342+ ("verdadero" — 0)
18.
5 + !5 + !!5
19.
[] + [1] + 2
20.
1 + 2 + "3"
verdadero + falso
Al intentar utilizar el operador de suma (+) entre dos valores booleanos, estos se convierten a números.
Y todos sabemos true
debe convertirse en 1
y false
debe convertirse en 0
. Entonces true+false
devuelve 1
.
[,,,].length
[,,,]
genera una matriz con tres ranuras vacías. La última coma es la coma final.
Puedes pensarlo de esta manera.
[,] ==> [vacío,] [,,] ==> [vacío, vacío,] [,,,] ==> [vacío, vacío, vacío,]
entonces [,,,].length
devuelve 3.
[1, 2, 3] + [4, 5, 6]
Cuando intentas utilizar el operador de suma (+) entre matrices, se convierten en cadenas.
Al convertir una matriz en una cadena, se llama al método toString()
de la matriz. JavaScript utiliza internamente el método toString()
. Cuando una matriz necesita mostrarse como texto, conectará sus elementos con comas.
[1, 2, 3].toString() ==> '1, 2, 3' [4, 5, 6].toString() ==> '4, 5, 6'
entonces
[1, 2, 3] + [4, 5, 6] ==> '1, 2, 3' + '4 , 5, 6' ==> "1,2,34,5,6"
0.2 + 0.1 === 0.3
Dado que los números de coma flotante son difíciles de representar con precisión en las computadoras, los números matemáticos 0.1
y 0.2
solo se pueden aproximar en computadoras digitales. representación.
El resultado de 0.1+0.2
no es exactamente 0.3
. No sólo JavaScript, otros lenguajes de programación tienen el mismo problema.
10, 2
La coma ( ,
) también es un operador legal en JavaScript, evalúa cada operando (de izquierda a derecha) y devuelve el valor del último operando.
Por lo tanto, 10,2 devuelve 2
!!""
""
es una cadena vacía, que es un valor ficticio.
Nota: 0, cadena vacía "", nulo e indefinido son todos valores virtuales.
!
es el operador lógico "no", que convierte verdadero en falso y viceversa.
Si usamos !
dos veces, es decir !!
, convertirá un valor normal en un valor booleano. Entonces !""
devuelve false
.
+!![]
Las matrices son todos valores verdaderos, incluso las matrices vacías. Entonces !![]
devolverá true
.
!![]; // -> verdadero
y el signo +
convierte el valor verdadero a su representación numérica: 1
, entonces +!![]
devuelve 1
.
true == "true"
El operador de igualdad (==) comprueba si sus dos operandos son iguales y devuelve un resultado booleano.
De acuerdo con las reglas abstractas de comparación de igualdad, ambos valores se convierten en números cuando se comparan.
verdadero == "verdadero" ==> Número(verdadero) == Número("verdadero") ==> 1 == NaN
Entonces, ture =="true"
devuelve falso.
010 - 03
Aquí hay un pequeño truco: si un número comienza con 0
, se trata como un número octal en JavaScript. Entonces:
010 - 03 ==> 8 - 3 ==> 5
Además:
""--""
Esto parece una mala sintaxis, pero funciona bien.
La cadena vacía se puede convertir al valor booleano falso o al valor numérico 0. Entonces -""
es 0
nulo + 0
Como dijimos antes, null
es un valor virtual. Se convertirá al valor booleano false
o al valor numérico 0
. Entonces el resultado devuelve 0
.
0/0
Esta es una expresión matemática ilegal. La ecuación 0/0 no tiene ninguna respuesta numérica significativa, el resultado es solo NaN
.
1/0 === 10 1000**
Aunque 1/0
es una expresión matemática ilegal como antes. Pero cuando el divisor no es 0
, JavaScript piensa que el resultado de esta expresión es Infinity
.
Y 10**1000
es un número grande y JS no puede representar este número correctamente. (El valor entero más alto en JavaScript es 2^53-1
). Por tanto, 10 * 1000
también se considera infinito.
El infinito siempre es igual a otro infinito, por lo que 1/0 === 10 ** 1000
devuelve verdadero.
true++
No hay nada especial en esto, es solo un error de sintaxis.
""- 1Si bien
el operador de suma (+) funciona tanto en números como en cadenas, el operador de resta (-) no es útil en cadenas, por lo que JavaScript lo interpreta como una operación entre números. Una cadena vacía se escribirá a 0.
"" - 1 ==> Número("") - 1 ==> 0 - 1 ==> -1
entonces "" — 1
devuelve -1
(nulo - 1) - "1"
como arriba.
nulo ==> 0 (nulo - 1) ==> -1 "1" ==> 1
entonces (null — 1) — “1”
devuelve -2
38 4343 2342+ ("true" - 0)
Podrías sospechar que JS está tan loco que convierte la cadena en "true" ¿Es el valor numérico? representación del valor booleano verdadero. Sin embargo, no es tan loco. Lo que realmente sucede es que está intentando convertir la cadena en un número, pero falla.
Number("true"); // -> NaN
En operaciones numéricas de JavaScript, siempre que un valor sea NaN, el resultado final de la operación debe ser NaN. 38 * 4343 * 2342
es solo una cortina de humo.
5 + !5 + !!5
como se indicó anteriormente.
Entonces:
!5 ==> 0 !!5 ==> 1
[] + [1] + 2
Al intentar utilizar el operador de suma (+) entre matrices, estas se convierten en cadenas.
[] ==> '' [1] ==> '1' [] + [1] ==> '1' '1' + 2 ==> '12'
entonces el resultado es '12'.
1 + 2 + "3"
JavaScript realiza estas operaciones de izquierda a derecha. Cuando se suma el número 3 a la cadena 3, la concatenación de cadenas tendrá prioridad.
1 + 2; // -> 3 3 + "3"; // -> "33"
Hablando francamente, estos desafíos no aportan ningún valor a nuestras habilidades de codificación, por lo que este tipo de código no debe escribirse en proyectos reales
. Sin embargo, considere estas habilidades como amigos. ¿No es muy interesante fingir tener 13 años con los colegas?
Autor: Marina Mosti
Fuente: medio
Texto original: https://medium.com/frontend-canteen/20-useless-but-funny-challange-for-javascript-develor-9eea39bb8efb
[Recomendaciones de tutoriales en video relacionados: interfaz web]
Las anteriores son 20 expresiones JS extrañas ¡Adivina el resultado de salida! Para obtener más detalles, preste atención a otros artículos relacionados en el sitio web chino de php.