Anyone know me explain the following situation:

2
pessoa = {
    nome: 'leandro',
    idade: '2'
}
for(x=0;x<pessoa.idade;x++){
   console.log('Ola mundo');     // ele repete 2 vezes "Ola mundo" na tela
}

The question I have is that I thought that javascript differed in string numbers, but it seems that I was wrong because when I put a string in the object it normally accepts.

    
asked by anonymous 20.07.2018 / 02:29

3 answers

1

As @Andrew replied, Javascript does implicit conversions to solve certain situations. Where it is possible to perform operations as String , it operates as such, otherwise it converts.

Here are some practical examples:

var a = "5";
var b = 2;
var c = 5;

// confirmando os tipos:
console.log('Tipo de a: ' + typeof a);
console.log('Tipo de b: ' + typeof b);
console.log('Tipo de c: ' + typeof c);

// é possível operar como string, concatena:
console.log(a+b)
// não é possível operar como string, divide:
console.log(a/b)
// é possível operar como string, compara os dois como string:
console.log(a == c);
// não é possível operar como string, converte para número:
console.log(a < b);
    
20.07.2018 / 03:27
1

Javascript differentiates string from numbers yes. But it's doing an automatic job that you're letting through.

The moment you do:

x < pessoa.idade

Javascript knows that the < operator makes more sense by comparing numbers, so by backing up it's doing it for you:

x < parseInt(pessoa.idade)

Welcome to JS, one of the most flexible languages in the world.

I hope you have understood.

Hugs.

    
20.07.2018 / 03:21
1

In terms of comparison, JavaScript always sees a numeric string as a number. In your case, the number 2 is seen as a value to be compared, no matter if it is a string or not.

Except in cases of math operations, JavaScript will consider the type in case of summation, because of the + sign that is also used in concatenation. Example:

pessoa = {
    nome: 'leandro',
    idade: '2'
}
console.log(pessoa.idade+1); // imprime 21

To add the value it would be necessary to convert the string to number using, for example, parseInt() :

pessoa = {
    nome: 'leandro',
    idade: '2'
}

console.log(parseInt(pessoa.idade)+1); // imprime 3

In case of subtractions, divisions and multiplications, the value will be considered an absolute number:

pessoa = {
   nome: 'leandro',
   idade: '2.    '
}

console.log(pessoa.idade-1); // subtração: imprime 1
console.log(pessoa.idade/2); // divisão: imprime 1
console.log(pessoa.idade*3); // multiplicação: imprime 6

I see that the value in idade I put a period and several spaces. JavaScript will convert the string value to absolute value. As the decimal separator is the point and the spaces are ignored, the absolute value of the string will be only 2 .

    
20.07.2018 / 04:36