Para converter uma string em um inteiro, você obviamente pode usar a função parseInt.
parseInt('3', 10); // returns 3
parseInt('3.75', 10); // returns 3
No entanto, em muitos casos, podemos usar também o operador de negação, que é um til “~”.
~~'3'; // returns 3
~~'3.75'; // returns 3
Durante as operações bit a bit, os operandos são convertidos em inteiros de 32 bits. Podemos usá-lo para converter uma string em um número negando os bits de uma string (ela será convertida naquele momento) e, em seguida, negando o resultado.
Lembre-se de que o resultado dessa operação não será igual ao resultado do uso da função parseInt. Para ver a diferença, você deve converter algo que não se pareça com um número em primeiro lugar, por exemplo, converter uma string que comece com letras.
parseInt('a', 10); // returns NaN
parseInt({}, 10); // returns NaN
parseInt('123abc', 10); // returns 123
parseInt('abc123', 10); // returns NaN
~~'a'; // returns 0
~~{}; // returns 0
~~'123abc'; // returns 0
~~'abc123'; // returns 0
Também tenha em mente que o inteiro de 32 bits é um número em um intervalo de -2147 483 648 a +2 147 483 647. Isso significa que, quando esse intervalo for excedido, esse número não será automaticamente convertido em algo com um intervalo mais amplo.
parseInt('1387037027228', 10); // returns 1387037027228
~~'1387037027228'; // returns -237409380
Se você tiver algum comentário ou não estiver satisfeito com o meu inglês – escreva abaixo 🙂
* Observe que o resultado final dessa operação não será um número inteiro, pois não existe tal tipo em JS – o resultado será uma instância de Number