node - typeof javascript
Diferencias entre typeof y instanceof en JavaScript (2)
Esta pregunta ya tiene una respuesta aquí:
Estoy trabajando con node.js, así que esto podría ser específico para V8.
Siempre he notado algunas rarezas con diferencias entre typeof y instanceof, pero aquí hay una que realmente me molesta:
var foo = ''foo'';
console.log(typeof foo);
Output: "string"
console.log(foo instanceof String);
Output: false
¿Que esta pasando ahí?
Hay cadenas literales y existe la clase String
. Son independientes, pero funcionan a la perfección, es decir, aún puede aplicar métodos de String
a una cadena literal, y actuará como si la cadena literal fuera una instancia de objeto String
.
Si crea explícitamente una instancia de String
, es un objeto, y es una instancia de la clase de String
:
var s = new String("asdf");
console.log(typeof s);
console.log(s instanceof String);
Salida:
object
true
typeof
es una construcción que "devuelve" el tipo primitivo de lo que sea que lo pases.
instanceof
comprueba si el operando derecho aparece en algún lugar de la cadena del prototipo de la izquierda.
Es importante tener en cuenta que existe una gran diferencia entre el literal de cadena "abc"
y el objeto de cadena new String("abc")
. En este último caso, typeof
devolverá "objeto" en lugar de "cadena".