Buscar..


tipo de

typeof es la función 'oficial' que se usa para obtener el type en javascript, sin embargo, en ciertos casos puede dar resultados inesperados ...

1. cuerdas

typeof "String" o
typeof Date(2011,01,01)

"cuerda"

2. Números

typeof 42

"número"

3. Bool

typeof true (valores válidos true y false )

booleano

4. Objeto

typeof {} o
typeof [] o
typeof null o
typeof /aaa/ or
typeof Error()

"objeto"

5. Función

typeof function(){}

"función"

6. indefinido

var var1; typeof var1

"indefinido"

Obtención del tipo de objeto por nombre de constructor

Cuando uno con el operador typeof uno obtiene un object tipo, cae en una categoría un poco perdida ...

En la práctica, es posible que deba limitarlo a qué tipo de 'objeto' es realmente y una forma de hacerlo es usar el nombre del constructor de objetos para obtener el sabor del objeto que realmente es: Object.prototype.toString.call(yourObject)

1. cuerda

Object.prototype.toString.call("String")

"[cadena de objeto]"

2. Número

Object.prototype.toString.call(42)

"[Número de objeto]"

3. Bool

Object.prototype.toString.call(true)

"[objeto booleano]"

4. Objeto

Object.prototype.toString.call(Object()) o
Object.prototype.toString.call({})

"[objeto Objeto]"

5. Función

Object.prototype.toString.call(function(){})

"[Función objeto]"

6. fecha

Object.prototype.toString.call(new Date(2015,10,21))

"[fecha del objeto]"

7. Regex

Object.prototype.toString.call(new RegExp()) o
Object.prototype.toString.call(/foo/);

"[objeto RegExp]"

8. Array

Object.prototype.toString.call([]);

"[Object Array]"

9. Nulo

Object.prototype.toString.call(null);

"[objeto nulo]"

10. indefinido

Object.prototype.toString.call(undefined);

"[objeto no definido]"

11. error

Object.prototype.toString.call(Error());

"[error de objeto]"

Encontrar la clase de un objeto

Para encontrar si un objeto fue construido por un determinado constructor o uno heredado de él, puede usar el comando instanceof :

//We want this function to take the sum of the numbers passed to it
//It can be called as sum(1, 2, 3) or sum([1, 2, 3]) and should give 6
function sum(...arguments) {
    if (arguments.length === 1) {
        const [firstArg] = arguments
        if (firstArg instanceof Array) { //firstArg is something like [1, 2, 3]
            return sum(...firstArg) //calls sum(1, 2, 3)
        }
    }
    return arguments.reduce((a, b) => a + b)
}

console.log(sum(1, 2, 3))   //6
console.log(sum([1, 2, 3])) //6
console.log(sum(4))         //4

Tenga en cuenta que los valores primitivos no se consideran instancias de ninguna clase:

console.log(2 instanceof Number)        //false
console.log('abc' instanceof String)    //false
console.log(true instanceof Boolean)    //false
console.log(Symbol() instanceof Symbol) //false

Cada valor en JavaScript, además de null e undefined también tiene una propiedad de constructor almacena la función que se utilizó para construirlo. Esto incluso funciona con primitivos.

//Whereas instanceof also catches instances of subclasses,
//using obj.constructor does not
console.log([] instanceof Object, [] instanceof Array)           //true true
console.log([].constructor === Object, [].constructor === Array) //false true

function isNumber(value) {
    //null.constructor and undefined.constructor throw an error when accessed
    if (value === null || value === undefined) return false
    return value.constructor === Number
}
console.log(isNumber(null), isNumber(undefined))                  //false false
console.log(isNumber('abc'), isNumber([]), isNumber(() => 1))     //false false false
console.log(isNumber(0), isNumber(Number('10.1')), isNumber(NaN)) //true true true


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow