Zoeken…


soort van

typeof is de 'officiële' functie die men gebruikt om het type in javascript te krijgen, maar in bepaalde gevallen kan het onverwachte resultaten opleveren ...

1. Snaren

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

"draad"

2. nummers

typeof 42

"aantal"

3. Bool

typeof true (geldige waarden true en false )

"Boolean"

4. Object

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

"voorwerp"

5. functie

typeof function(){}

"functie"

6. Niet gedefinieerd

var var1; typeof var1

"Undefined"

Objecttype ophalen op constructeursnaam

Wanneer een met typeof exploitant één soort zet object valt in categorie enigszins waart ...

In de praktijk moet je het misschien beperken tot wat voor soort 'object' het eigenlijk is en een manier om het te doen is om de naam van de constructor van het object te gebruiken om de smaak van het object te krijgen: Object.prototype.toString.call(yourObject)

1. String

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

"[object String]"

2. Nummer

Object.prototype.toString.call(42)

"[objectnummer]"

3. Bool

Object.prototype.toString.call(true)

"[object Boolean]"

4. Object

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

"[Object Object]"

5. functie

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

"[object Functie]"

6. Datum

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

"[objectdatum]"

7. Regex

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

"[object RegExp]"

8. Serie

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

"[object Array]"

9. Null

Object.prototype.toString.call(null);

"[object Null]"

10. Niet gedefinieerd

Object.prototype.toString.call(undefined);

"[object niet gedefinieerd]"

11. Foutmelding

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

"[objectfout]"

De klasse van een object zoeken

Als u wilt weten of een object is gebouwd door een bepaalde constructor of er een heeft geërfd, kunt u de opdracht instanceof gebruiken:

//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

Merk op dat primitieve waarden niet als instanties van een klasse worden beschouwd:

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

Elke waarde in JavaScript heeft naast null en undefined ook een constructor waarin de functie is opgeslagen die is gebruikt om deze te construeren. Dit werkt zelfs met primitieven.

//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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow