versuchen, zu überprüfen, ob die Eigenschaft einen Wert von function Number()
von function String()
hat
Wenn Sie buchstäblich die Funktionen bedeutenNumber
oder String
verwenden ==
(oder ===
):
if (this.props.fieldType === Number) {
Wenn Sie "ist es eine Nummer" oder "ist es eine Zeichenfolge", verwenden Sie typeof
, nicht instanceof
:
if (typeof this.props.fieldType === "number") {
Wenn Sie meinen, „ist es ein Objekt über neue Number
erstellt“ (was wirklich ungewöhnlich wäre), dann instanceof
ist, was Sie wollen:
if (this.props.fieldType instanceof Number) {
Beispiele für alle drei:
var props = {
numberFunction: Number,
number: 42,
numberObject: new Number(42)
};
console.log(props.numberFunction === Number);
console.log(typeof props.number === "number");
console.log(props.numberObject instanceof Number);
Sie erwähnten instanceof
in Bezug auf getPrototypeOf
und einen Gleichheitsvergleich. Es ist wichtig zu verstehen, dass dies sehr unterschiedliche Dinge sind. die aktuelle prototype
Eigenschaft der Funktion (der rechte Operand) hat überall in seiner Prototypkette
instanceof
überprüft, ob das Objekt (der linke Operand). Es ist möglicherweise nicht der unmittelbare Prototyp des Objekts; es kann weiter unten sein.Zum Beispiel:
function Thing() {
}
var t = new Thing();
// The following is true, Object.prototype is in t's prototype chain
console.log(t instanceof Object);
// The following is false, t's prototype isn't Object.prototype;
// Object.prototype is further down t's prototype chain
console.log(Object.getPrototypeOf(t) === Object.prototype);
Versuchen Sie, das Val zu überprüfen Ist eine Zahl (wie "1") oder eine Zeichenkette (wie "foo")? –
nicht. Versuchen Sie zu überprüfen, ob die Eigenschaft einen Wert von 'function Number()' von 'function String()' –
hat. Ihre 'instanceof' Prüfung gibt nur' true' zurück, wenn Ihr 'fieldType' mit' new Number() 'erstellt wurde oder 'new String()'. Ist das der Fall? –