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!