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