
JavaScript é uma linguagem de programação muito tolerante a falhas e muitas expressões que não são legais em outras linguagens de programação funcionarão bem em JavaScript.
Isso resulta em muito código estranho. Você quer desafiá-lo?
Neste desafio, você verá 20 expressões malucas e deverá adivinhar seu resultado.
1.
verdadeiro + falso
2.
**1.**
3.
[1, 2, 3] + [4, 5, 6]
4.
0,2 + 0,1 === 0,3
5.
10,2
6.
!!""
7.
+!![]
8.
verdadeiro == "verdadeiro"
9.
010 - 03
10.
"" - - ""
11.
nulo + 0
12.
0/0
13.
1/0 === 10 ** 1000
14.
verdadeiro++
15.
"" - 1
16.
(nulo - 1) - "1"
17.
38 * 4343 * 2342+ ("verdadeiro" — 0) 18.
5 + !5 + !!5
19.
[] + [1] + 2
20.
1 + 2 + "3"
verdadeiro + falso
Ao tentar utilizar o operador de adição (+) entre dois valores booleanos, eles são convertidos em números.
E todos nós sabemos true deve ser convertido em 1 e false deve ser convertido em 0 . Então true+false retorna 1 .
[,,,].length
[,,,] gera um array com três slots vazios. A última vírgula é a vírgula final.
Você pode pensar desta forma.
[,] ==> [vazio,] [,,] ==> [vazio, vazio,] [,,,] ==> [vazio, vazio, vazio,]
então [,,,].length retorna 3.
[1, 2, 3] + [4, 5, 6]
Quando você tenta usar o operador de adição (+) entre arrays, eles são convertidos em strings.
Ao converter um array em uma string, o método toString() do array é chamado. O método toString() é usado internamente pelo JavaScript. Quando um array precisa ser exibido como texto, ele conectará seus elementos com vírgulas.
[1, 2, 3].toString() ==> '1, 2, 3' [4, 5, 6].toString() ==> '4, 5, 6'
então
[1, 2, 3] + [4, 5, 6] ==> '1, 2, 3' + '4 , 5, 6' ==> "1,2,34,5,6"
0,2 + 0,1 === 0,3
Como os números de ponto flutuante são difíceis de representar com precisão em computadores, 0.1 e 0.2 matemáticos só podem ser aproximados em computadores digitais. representação.
O resultado de 0.1+0.2 não é exatamente 0.3 . Não apenas JavaScript, outras linguagens de programação têm o mesmo problema.
10, 2
A vírgula ( , ) também é um operador legal em JavaScript, ela avalia cada operando (da esquerda para a direita) e retorna o valor do último operando.
Portanto, 10,2 retorna 2
!!""
"" é uma string vazia, que é um valor fictício.
Nota: 0, string vazia "", nulo e indefinido são todos valores virtuais.
! é o operador lógico "não", transformando verdadeiro em falso e vice-versa.
Se usarmos ! duas vezes, isto é !! , ele converterá um valor normal em um valor booleano. Então !"" retorna false .
+!![]
arrays são todos valores verdadeiros, até mesmo arrays vazios. Então !![] retornará true .
!![]; // -> true
e o sinal + converte o valor verdadeiro em sua representação numérica: 1 , então +!![] retorna 1 .
true == "true"
O operador de igualdade (==) verifica se seus dois operandos são iguais e retorna um resultado booleano.
De acordo com as regras abstratas de comparação de igualdade, ambos os valores são convertidos em números quando comparados.
true == "true" ==> Number(true) == Number("true") ==> 1 == NaN Então, ture =="true" retorna falso.
010 - 03
Aqui vai um pequeno truque: se um número começar com 0 , ele será tratado como um número octal em JavaScript. Portanto:
010 - 03 ==> 8 - 3 ==> 5
Além disso:

""--""
Parece uma sintaxe ruim, mas funciona bem.
A string vazia pode ser convertida no valor booleano falso ou no valor numérico 0. Então -"" é 0

null + 0
Como dissemos antes, null é um valor virtual. Ele será convertido para o valor booleano false ou para o valor numérico 0 . Portanto, o resultado retorna 0 .
0/0
Esta é uma expressão matemática ilegal. A equação 0/0 não tem nenhuma resposta numérica significativa, a saída é apenas NaN .
1/0 === 10 1000**
Embora 1/0 seja uma expressão matemática ilegal como antes. Mas quando o divisor não é 0 , o JavaScript pensa que o resultado desta expressão é Infinity .

E 10**1000 é um número grande e JS não consegue representar esse número corretamente. (O valor inteiro mais alto em JavaScript é 2^53-1 ). Portanto, 10 * 1000 também é considerado infinito.
O infinito é sempre igual a outro infinito, então 1/0 === 10 ** 1000 retorna verdadeiro.
true++
Não há nada de especial nisso, é apenas um erro de sintaxe.

""- 1Embora
o operador de adição (+) funcione tanto em números quanto em strings, o operador de subtração (-) não é útil em strings, então o JavaScript o interpreta como uma operação entre números. Uma string vazia será forçada por tipo para 0.
"" - 1 ==> Número("") - 1 ==> 0 - 1 ==> -1 então "" — 1 retorna -1
(nulo - 1) - "1"
como acima.
nulo ==> 0 (nulo - 1) ==> -1 "1" ==> 1
so (null — 1) — “1” retorna -2
38 4343 2342+ ("true" - 0)
Você pode suspeitar que JS é tão louco que converte a string "true" É o numérico representação do valor booleano verdadeiro. No entanto, não é tão louco. O que realmente está acontecendo é que ele está tentando converter a string em um número, mas está falhando.
Number("true"); // -> NaN Em operações numéricas JavaScript, desde que um valor seja NaN, o resultado final da operação deve ser NaN. 38 * 4343 * 2342 é apenas uma cortina de fumaça.
5 + !5 + !!5
conforme declarado acima.
Então:
!5 ==> 0 !!5 ==> 1
[] + [1] + 2
Ao tentar usar o operador de adição (+) entre arrays, eles são convertidos em strings.
[] ==> '' [1] ==> '1' [] + [1] ==> '1' '1' + 2 ==> '12'
então o resultado é '12'.

1 + 2 + "3"
JavaScript executa essas operações da esquerda para a direita. Quando o número 3 é adicionado à string 3, a concatenação da string terá precedência.
1 + 2; // -> 3 3 + "3"; // -> "33"
Falando francamente, esses desafios não agregam nenhum valor às nossas habilidades de codificação, portanto, esse tipo de código não deve ser escrito em projetos reais
. não é muito interessante fingir ter 13 anos com os colegas?
Autor: Marina Mosti
Fonte: médio
Texto original: https://medium.com/frontend-canteen/20-useless-but-funny-challange-for-javascript-develor-9eea39bb8efb
[Recomendações de tutoriais em vídeo relacionados: web front-end]
Acima estão 20 expressões JS estranhas , adivinhe o resultado da saída! Para mais detalhes, preste atenção a outros artigos relacionados no site php chinês!