Artigo original: https://www.freecodecamp.org/news/javascript-data-types-typeof-explained/

O typeof é uma palavra-chave em JavaScript que retornará o tipo da variável quando você a chama. Você pode usá-la para validar parâmetros de função ou verificar se as variáveis estão definidas. Há outros usos também.

O operador typeof é útil porque é uma maneira fácil de verificar o tipo de uma variável em seu código. Isso é importante porque o JavaScript é uma linguagem dinamicamente tipada (texto em inglês). Isso quer dizer que você não é obrigado a atribuir tipos a variáveis quando as cria. Como uma variável não é restrita desse modo, o seu tipo pode mudar durante o tempo de execução de um programa.

Por exemplo:

var x = 12345; // number
x = 'string'; // string
x = { key: 'value' }; // object

Como você pode ver no exemplo acima, uma variável em JavaScript pode mudar seu tipo durante a execução de um programa. Isso pode ser difícil de acompanhar como um programador. É aqui que o operador typeof é útil.

O operador typeof retorna uma string que representa o tipo atual de uma variável. Você o utiliza digitando typeof(variavel)  ou typeof variavel. Voltando ao exemplo anterior, você pode usá-lo para verificar o tipo da variável x em cada estágio:

var x = 12345; 
console.log(typeof x) // number
x = 'string'; 
console.log(typeof x) // string
x = { key: 'value' };
console.log(typeof x) // object

Isso pode ser útil para verificar o tipo de uma variável em uma função e continuar conforme o caso.

Aqui está um exemplo de uma função que pode receber uma variável que é uma string ou um número:

function fazerAlgo(x) {
  if(typeof(x) === 'string') {
    alert('x é uma string')
  } else if(typeof(x) === 'number') {
    alert('x é um número')
  }
}

Outra maneira do operador typeof poder ser útil é assegurando que uma variável esteja definida antes que você possa tentar acessá-la em seu código. Isso pode ajudar a evitar erros em um programa que podem ocorrer se você tentar acessar uma variável que não esteja definida.

function(x){
  if (typeof(x) === 'undefined') {
    console.log('A variável x não está definida');
    return;
  }
  // Continue com a função aqui...
}

A saída do operador typeof pode não ser sempre o que se espera quando se verifica a existência de um número.

Os números podem se tornar o valor NaN (Não é um Número - Not a Number) por múltiplos motivos.

console.log(typeof NaN); //"number"

Talvez você tenha tentado multiplicar um número com um objeto porque se esqueceu de acessar o número dentro do objeto.

var x = 1;
var y = { number: 2 };
console.log(x * y); // NaN
console.log(typeof (x * y)); // number

Na verificação de um número, não é suficiente verificar a saída de typeof para um número, uma vez que NaN também passa nesse teste.

Esta função verifica os números e também não permite que o valor NaN passe.

function eUmNumero(dado) {
  return (typeof dado === 'number' && !isNan(dado));
}

Mesmo pensando que este é um método de validação útil, temos que ter cuidado , pois o JavaScript tem algumas partes estranhas e uma delas é o resultado do typeof sobre instruções particulares. Por exemplo, em JavaScript muitas coisas são apenas objetos para que você pode encontrar.

var x = [1,2,3,4]; 
console.log(typeof x)  // object

console.log(typeof null)  // object