Heim  >  Artikel  >  Web-Frontend  >  Teilen Sie die seltsame Art und Weise, JS zu schreiben, um festzustellen, ob ein Element eine Zahl ist

Teilen Sie die seltsame Art und Weise, JS zu schreiben, um festzustellen, ob ein Element eine Zahl ist

黄舟
黄舟Original
2016-12-12 11:37:221139Durchsuche

Es handelt sich um jede Methode

代码如下:
var each = _.each = _.forEach = function(obj, iterator, context) { 
if (obj == null) return; 
if (nativeForEach && obj.forEach === nativeForEach) { 
obj.forEach(iterator, context); 
} else if (obj.length === +obj.length) { 
for (var i = 0, l = obj.length; i < l; i++) { 
if (iterator.call(context, obj[i], i, obj) === breaker) return; 
} 
} else { 
for (var key in obj) { 
if (_.has(obj, key)) { 
if (iterator.call(context, obj[key], key, obj) === breaker) return; 
} 
} 
} 
};

In dieser Methode gibt es einen Satz:

if (obj.length === +obj.length)

Dieser Satz entspricht

if (typeof obj.length === &#39;number&#39;)

, der verwendet wird Elemente beurteilen Ob es sich um einen numerischen Typ handelt. typeof und Object.prototype.toString sind gängige Schreibweisen. Letzteres ist ungewöhnlich und für den Normalbürger schwer zu verstehen.

Einige Bibliotheken verfügen über Toolfunktionen zur Typbeurteilung, wie z. B.

代码如下:
function isNumber1(a){ 
return typeof a === &#39;number&#39; 
}

oder verwenden Sie Object.prototype.toString

代码如下:
function isNumber2(a) { 
return Object.prototype.toString.call(a) === &#39;[object Number]&#39; 
}

, um es dahingehend zu ändern Schreibweise

代码如下:
function isNumber3(a){ 
return a === +a 
}

Getestet mit verschiedenen Typen

代码如下:
var arr = [&#39;1&#39;, true, false, undefined, null, {}, [], 1] 
for (var i=0; i<arr.length; i++) { 
console.log(isNumber3(arr[i])) 
}

Das Ergebnis ist, dass nur das letzte Element im Array wahr ist. Das heißt, nur der numerische Typ a === +a ist wahr.
Warum nicht typeof verwenden? Weil der String-Vergleich theoretisch alle Zeichen durchlaufen muss und die Leistung direkt proportional zur Länge des Strings ist.

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