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