Ricerca…


tipo di

typeof è la funzione 'ufficiale' che si usa per ottenere il type in javascript, tuttavia in certi casi potrebbe produrre risultati inattesi ...

1. Archi

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

"stringa"

2. Numeri

typeof 42

"numero"

3. Bool

typeof true (valori validi true e false )

"Booleano"

4. Oggetto

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

"oggetto"

5. Funzione

typeof function(){}

"funzione"

6. Non definito

var var1; typeof var1

"non definito"

Ottenere il tipo di oggetto in base al nome del costruttore

Quando uno con typeof operatore si ottiene object tipo cade in una categoria un po 'sprecata ...

In pratica potrebbe essere necessario restringerlo a quale tipo di "oggetto" sia effettivamente e un modo per farlo è usare il nome del costruttore dell'oggetto per ottenere quale sapore di oggetto sia effettivamente: Object.prototype.toString.call(yourObject)

1. Stringa

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

"[oggetto String]"

2. Numero

Object.prototype.toString.call(42)

"[numero oggetto]"

3. Bool

Object.prototype.toString.call(true)

"[oggetto Booleano]"

4. Oggetto

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

"[oggetto Oggetto]"

5. Funzione

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

"[Funzione oggetto]"

6. Data

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

"[oggetto Data]"

7. Regex

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

"[oggetto RegExp]"

8. Matrice

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

"[oggetto Array]"

9. Null

Object.prototype.toString.call(null);

"[oggetto Null]"

10. Non definito

Object.prototype.toString.call(undefined);

"[oggetto non definito]"

11. Errore

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

"[oggetto errore]"

Trovare la classe di un oggetto

Per scoprire se un oggetto è stato costruito da un determinato costruttore o se ne eredita uno, è possibile utilizzare il 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

Nota che i valori primitivi non sono considerati istanze di alcuna classe:

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

Ogni valore in JavaScript oltre a null e undefined ha anche una proprietà del constructor memorizza la funzione che è stata utilizzata per costruirlo. Funziona anche con i primitivi.

//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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow