Cuando elimino solo x del tipo de x y ejecuto da número de objeto como salida sin espacios cuando solo elimino y del tipo y y ejecuto no da nada
<!DOCTYPE html> <html> <body> <h2>JavaScript Strings</h2> <p id="demo"></p> <script> // x is a string let x = "John"; // y is an object let y = new String("John"); document.getElementById("demo").innerHTML = typeof x + "<br>" + typeof y; </script> </body> </html>Cuando creas una variable como esta; var a = "hello world" , está utilizando un literal de cadena para crear la cadena. Pero cuando creas una variable como esta; new String("hello world") , en realidad estás instanciando el objeto "String". Al reemplazar un objeto de cadena, se crea un nuevo objeto cada vez, pero con un literal de cadena, solo se reemplaza.
El problema que mencionas ocurre porque estás usando la función typeof() sin paréntesis, lo que significa que tu código está tratando de usar + "<br>" como argumentos. El tipo de + "<br>" es un número, por eso te dice que es un number en la misma línea que el object (el <br> no se representa porque lo usaste en la función). En su lugar, use 'typeof' como typeof(VAR) en lugar de typeof VAR .