Suche…


Art der

typeof ist die "offizielle" Funktion, die verwendet wird, um den type in Javascript zu erhalten. In bestimmten Fällen kann dies jedoch zu unerwarteten Ergebnissen führen ...

1. Saiten

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

"string"

2. Zahlen

typeof 42

"Nummer"

3. Bool

typeof true (gültige Werte true und false )

"boolean"

4. Objekt

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

"Objekt"

5. Funktion

typeof function(){}

"Funktion"

6. Undefiniert

var var1; typeof var1

"nicht definiert"

Objekttyp nach Konstruktornamen abrufen

Wenn man mit typeof einem Operator bekommt Typen object fällt es in etwas wast Kategorie ...

In der Praxis müssen Sie möglicherweise einschränken, um welche Art von "Objekt" es sich tatsächlich handelt. Eine Möglichkeit besteht darin, den Namen des Objektkonstruktors zu verwenden, um die Art des Objekts zu ermitteln: Object.prototype.toString.call(yourObject)

1. String

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

"[Objekt String]"

2. Anzahl

Object.prototype.toString.call(42)

"[Objektnummer]"

3. Bool

Object.prototype.toString.call(true)

"[object Boolean]"

4. Objekt

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

"[Objekt Objekt]"

5. Funktion

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

"[Objektfunktion]"

6. Datum

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

"[Objekt Datum]"

7. Regex

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

"[object RegExp]"

8. Array

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

"[Objektarray]"

9. Null

Object.prototype.toString.call(null);

"[Objekt Null]"

10. Undefiniert

Object.prototype.toString.call(undefined);

"[Objekt undefiniert]"

11. Fehler

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

"[Objektfehler]"

Klasse eines Objekts suchen

Um herauszufinden, ob ein Objekt von einem bestimmten Konstruktor oder einem von ihm erbenden Konstruktor erstellt wurde, können Sie den Befehl 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

Beachten Sie, dass Grundwerte nicht als Instanzen einer Klasse betrachtet werden:

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

Jeder Wert in JavaScript neben null und undefined hat auch eine constructor die Funktion gespeichert ist, mit der er erstellt wurde. Dies funktioniert sogar mit Primitiven.

//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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow