Heim  >  Artikel  >  Web-Frontend  >  Detaillierte Erläuterung der Verwendung der js-Typbeurteilung

Detaillierte Erläuterung der Verwendung der js-Typbeurteilung

php中世界最好的语言
php中世界最好的语言Original
2018-05-28 13:50:261113Durchsuche

Dieses Mal erkläre ich Ihnen ausführlich, welche Vorsichtsmaßnahmen Sie bei der Verwendung von js-Typbeurteilungen beachten sollten. Bei der

js

-Typkonvertierung erkennt typeof auch null als Objekt und der zurückgegebene Typ ist kleiner. Wir verwenden Object.prototype.toString, um

zu implementieren Die erste Version

function isArray(value){
  return Object.prototype.toString.call(value) === "[object Array]";
}
function isFunction(value){
  return Object.prototype.toString.call(value) === "[object Function]";
}
Aber so geschrieben ist es sehr mühsam, Arrays, Funktionen und Objekte einzeln zu beurteilen. Es ist prozeduraler

Die zweite Version

Wir möchten type(obj) verwenden, um den entsprechenden Typ zurückzugeben

string Da typeof Kleinbuchstaben ist, geben wir auch den Kleinbuchstabenstandard zurück

function type(obj){
  // -1 代表截止到倒数一位
  return Object.prototype.toString.call(obj).slice(8,-1).toLowerCase()
}
type([]) // "array"
aber das wird jedes Mal passieren Die Notwendigkeit, die beurteilten Typen in Scheiben zu schneiden und in Kleinbuchstaben umzuwandeln, ist auch relativ leistungsintensiv, und es gibt nur wenige beurteilte Typen, sodass wir Objekte verwenden können, um mögliche Ergebnisse im Voraus zwischenzuspeichern

Dritter Edition

//将types放外面 而不是放在type函数里面, 利用闭包,优化性能,不用每次判断都声明一次typess
var types = {
  '[object Function]': 'function',
  '[object Number]': 'number',
  ...
}
function type(obj) {
  var str = Object.prototype.toString.call(obj)
  return types[str]
}
Natürlich können wir die oben genannten Typen auch so optimieren

// 参考自jquery源码
var types = {}
当然也可以直接用数组存储
"Boolean Number String Function Array Date RegExp Object Error".split(" ").forEach(function(e,i){
  types [ "[object " + e + "]" ] = e.toLowerCase();
}) ;

JudgeFensterobjekt

Verwenden Sie das Fensterattribut des Fensterobjekts so, dass es gleich ist mit

function isWindow( obj ) {
  // obj !== undefined 是为了防止没传参数的时候后面报错
  // Uncaught TypeError: Cannot read property 'window' of undefined的错误
  
  return obj !== undefined && obj === obj.window;
}

Bestimmen Sie, ob es sich um ein Dom-Element handelt

isElement = function(obj) {
  return !!(obj && obj.nodeType === 1);
}
Ich glaube, Sie haben die Methode beherrscht, nachdem Sie den Fall gelesen haben Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!

Empfohlene Lektüre:

So verwenden Sie die V-Modell-Direktive in vue.js, um eine bidirektionale Datenbindung zu erreichen

So verwenden Sie den Swiper in Vue

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verwendung der js-Typbeurteilung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn