Heim >Web-Frontend >js-Tutorial >So bestimmen Sie den Typ jeder Variablen in JavaScript
Wir werden leicht von schönem Code angezogen und fügen ihn unwissentlich zu unserer Codebasis hinzu. Aber ich habe nicht in Ruhe über ihre Vor- und Nachteile nachgedacht. Nein, ich habe eine Reihe boolescher Funktionen zusammengestellt, die in der Form „Ist es…?“ beurteilt werden können.
isNull: function(a){ return a === null; }, isUndefined: function(a){ return a === undefined; }, isNumber: function(a){ return typeof a === 'number'; }, isString: function(a){ return typeof a === 'string'; }, isBoolean: function(a){ return typeof a === 'boolean'; }, isPrimitive: function(b){ var a = typeof b; return !!(b === undefined || b === null || a == 'boolean' || a == 'number' || a == 'string'); }, isArray: function(a){ return proto_obj.toString.call(a) === '[object Array]'; }, isFunction: function(a){ return proto_obj.toString.call(a) === '[object Function]'; }, isPlainObject: function(o){ if (!o || o === win || o === doc || o === doc.body) { return false; } return 'isPrototypeOf' in o && proto_obj.toString.call(o) === '[object Object]'; }, isWindow: function(o){ return o && typeof o === 'object' && 'setInterval' in o; }, isEmptyObject: function(o){ for(var a in o) { return false; } return true; }
Unter den oben genannten isXX-Serien wird isUndefined am häufigsten in Klassenbibliotheken verwendet. Bestimmen Sie beispielsweise, ob ein bestimmter Parameter übergeben wird, ob das Objekt ein bestimmtes Attribut hat usw. Aber diese Funktion muss nicht existieren, ich habe sie entfernt. Die Gründe sind wie folgt:
isUndefiniert und mit Kongruenz (===) oder typeof eine weitere Ebene von Funktionsaufrufen hinzufügen. Offensichtlich ist eine weitere Ebene von Funktionsaufrufen weniger effizient als die direkte Verwendung des nativen Operators (obwohl dies etwas trivial ist), aber es ist immer noch offensichtlich, wenn isUndefiniert viele Male aufgerufen wird, beispielsweise Zehntausende Male. Ich habe diese Funktion einmal zum Mailbox-Framework hinzugefügt und sie wurde mehr als 4.000 Mal aufgerufen. Laut dem Leistungsanalysetool nahm sie fast 1 % der Zeit in Anspruch. Nur ein Urteil, das 1 % der Anrufzeit ausmacht, ist immer noch schrecklich. Natürlich steht isUndefiniert im Mailbox-Framework an der Spitze mehrschichtiger Schließungen, und der Zugriff darauf wird auch mehr Zeit in Anspruch nehmen. Wenn dies nicht ausreicht, um Sie dazu zu bewegen, isUndefiniert aufzugeben, lesen Sie bitte weiter unten.
Funktionen kapseln und abstrahieren einen Teil des Codes bis zu einem gewissen Grad. Dies ist eine der Möglichkeiten, guten Code zu organisieren und trägt dazu bei, die Komplexität des Codes zu reduzieren. Die Funktion isNull/isUndefined/isBoolean/isNumber/isString enthält jedoch nur einen Satz und die Abstraktionsebene ist sehr niedrig. Daher ist es nicht erforderlich, eine Funktion zu kapseln und zu extrahieren.
isUndefiniert(a) spart nicht ein paar Bytes im Vergleich zu einem === undefiniert (heh, Sie können den Namen kürzer machen, verlieren aber die Lesbarkeit).
Zusammenfassend habe ich isNull/isUndefined/isBoolean/isNumber/isString für die grundlegende Typbeurteilung in der Klassenbibliothek entfernt und den Operator typeof direkt verwendet, wenn diese Beurteilungen erforderlich sind.
Das Obige ist der Inhalt der Beurteilungsmethode jedes Variablentyps in JavaScript. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!