Pergunta

Entendo que usar o tipo de comparação "===", portanto, executar o código a seguir resulta em "diferente" porque está comparando um tipo de número a um tipo de string.

var a = 20;
var b = "20";
    if (a === b) {
        alert("They are equal");
    } else {
        alert("They are not equal");
}

Mas não entendo como usar "==" para comparar apenas o valor resulta na mensagem "Eles são iguais".

var a = 20;
var b = "20";
    if (a == b) {
        alert("They are equal");
    } else {
        alert("They are not equal");
}

Como os valores são iguais?A string "20" não está armazenada como os caracteres ASCII 50 e 48 (0110010 e 0110000 em binário) e 20 armazenado como o número binário real 0010100?

EDITAR:Obrigado a todos!Acho que todas as respostas são ótimas e me ajudaram a entender isso muito melhor.

Foi útil?

Solução

o == O operador compara apenas os valores das variáveis. Se os tipos forem diferentes, uma conversão será operada. Portanto, o número 20 é convertido na sequência "20" e o resultado é comparado.

o === O operador compara não apenas os valores, mas também os tipos, portanto, nenhum elenco é operado. Nesse caso "20" !== 20

Outras dicas

Quando a conversão de tipo é necessária, o JavaScript converte operandos String, Number, Boolean ou Object da seguinte maneira.

  • Ao comparar um número e uma string, a string é convertida em um valor numérico.JavaScript tenta converter o literal numérico da string em um valor do tipo Number.Primeiro, um valor matemático é derivado do literal numérico da string.A seguir, esse valor é arredondado para o valor do tipo Número mais próximo.
  • Se um dos operandos for booleano, o operando booleano será convertido em 1 se for verdadeiro e +0 se for falso.
  • Se um objeto for comparado com um número ou string, o JavaScript tentará retornar o valor padrão do objeto.Os operadores tentam converter o objeto em um valor primitivo, um valor String ou Number, usando os métodos valueOf e toString dos objetos.Se esta tentativa de conversão do objeto falhar, um erro de tempo de execução será gerado.

O problema com a comparação == é que o JavaScript versão 1.2 não realiza conversão de tipo, enquanto as versões 1.1 e 1.3 em diante o fazem.

A comparação === está disponível desde a versão 1.3 e é a melhor maneira de verificar a correspondência de duas variáveis.

Se você precisar que seu código seja compatível com as versões 1.1, 1.2 e 1.3 do código JavaScript, você deve garantir que todas as variáveis ​​correspondam como se fosse uma comparação === que estava sendo executada.

O mecanismo JavaScript vê o A como um número e lança o B para numerar antes da avaliação.

Parte da definição de "==" é que os valores serão convertidos para os mesmos tipos antes da comparação, quando possível. Isso se aplica a muitos idiomas digitados vagamente.

O JavaScript foi projetado de modo que uma string contendo números seja considerada "igual" a esse número. O motivo disso é a simplicidade de uso para o caso de usuários inserindo um número em um campo de entrada e o site o valida no JS - você não precisa lançar a string inserida para um número antes de comparar.

Ele simplifica um caso de uso comum, e o operador === ainda permite comparar com o tipo considerado também.

Até onde eu sei, o JavaScript faz conversão automática de tipo de dados em tempo real - então talvez as variáveis ​​sejam convertidas automaticamente em tipos equivalentes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top