Heim > Artikel > Web-Frontend > JavaScript-Typprüfung und interne Eigenschaften [[Klasse]]
Alle Objekte enthalten eine interne Eigenschaft [[Klasse]]
Wir können nicht direkt auf diese Eigenschaft zugreifen, aber wir können über eine Methode darauf zugreifen
Diese Methode ist Object.prototype.toString.call(...)
Dies ist auch eine zuverlässigere Möglichkeit, den Typ zu überprüfen (Instanz, Konstruktor usw. sind unzuverlässig).
Zum Beispiel, wenn wir ein Array überprüfen
Object.prototype.toString.call([1,2,3]);
Konsolendruck"[object Array]"
Das „Array“ hier ruft tatsächlich das [[Class]]-Attribut innerhalb der nativen Funktion Array() auf
Wir können eine Funktion kapseln, die den Typ erkennt
function classOf(obj){ return Object.prototype.toString.call(obj).slice(8,-1); }
Die Funktion ist sehr einfach. Rufen Sie einfach die toString-Methode für den Objektprototyp auf und fangen Sie die für uns nützlichen Informationen ab
Wir können diese Funktion ausprobieren
console.log(classOf({'a':1})); console.log(classOf([1,2,3])); console.log(classOf(function a(){})); console.log(classOf(/a/)); console.log(classOf(123)); console.log(classOf('abc')); console.log(classOf(true)); console.log(classOf(Symbol())); console.log(classOf(undefined)); console.log(classOf(null));
Konsolendruck
Aber wir haben es gefunden dass nicht nur Objekte, sondern auch Grundtypwerte wie Zeichenfolge, Zahl und Boolescher Wert gedruckt werden können
Dies liegt daran, dass JavaScript ein Kapselungsobjekt für Grundtypwerte umschließt
sie in Objekte umwandelt, und Es gibt Attribute [[ Klasse]] für String(), Number() und Boolean()
Obwohl undefiniert und null keine entsprechenden nativen Funktionen Undefiniert() und Null() haben, werden dennoch interne Attribute zurückgegeben
Durch Mit dieser Funktion können wir den Typ genau bestimmen
Wir können sogar die Parameterliste bestimmen
function demo(){ console.log(classOf(arguments)); } demo();//"Arguments"
Zurück zu Object.prototype.toString.call(...) Warum ist das so mühsam? Übergeben Sie einen String, um den Typ zu bestimmen
Wir können sehen, was passiert, wenn wir toString() direkt aufrufen
console.log({'a':1}.toString()); console.log([1,2,3].toString()); console.log(function a(){}.toString()); console.log(/a/.toString()); console.log(123..toString()); // 只写一个点会被当成小数点,所以再写一个点代表方法调用console.log('abc'.toString()); console.log(true.toString()); console.log(Symbol().toString()); // 基本类型调用方法,会自动封装为对象 // 不能使用undefined.toString()或null.toString()会报错,因为没有对应的封装对象
Wir können sehen, dass nur gewöhnliche Objekte als zurückgegeben werden Wir wollen Ja,
Dies liegt daran, dass gewöhnliche Objekte die toString-Methode direkt auf dem obersten Prototyp-Objekt aufrufen
, während Arrays, Funktionen und diese grundlegenden Verpackungsobjekte Object erben und
einige Methoden überschreiben
Bei der Suche Bei der toString-Methode muss zuerst die Methode in der eigenen Prototypenkette gefunden werden
Wir müssen also call verwenden, um die toString-Methode von d im obersten Prototyp Object.prototype aufzurufen
Das Obige ist der JavaScript-Typ Überprüfen Sie den Inhalt des internen Attributs [[Klasse]]. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!