ホームページ >ウェブフロントエンド >jsチュートリアル >要素がnumber_javascriptスキルかどうかを判断するJSの奇妙な書き方を共有する

要素がnumber_javascriptスキルかどうかを判断するJSの奇妙な書き方を共有する

WBOY
WBOYオリジナル
2016-05-16 17:51:271233ブラウズ

これは、アンダースコア (1.3.3) のソース コードを読んだときに見たものです。その各メソッド


var each = _.each = _.forEach = function(obj, iterator, context) {
if (obj == null) return;ネイティブForEach && obj.forEach ===ネイティブForEach) {
obj.forEach(iterator, context);
} else if (obj.length === obj.length) {
for (var i = 0) , l = obj.長さ;
if (iterator.call(context, obj[i], i, obj)
} else {
for (var key in obj) {
if (_.has(obj, key)) {
if (iterator.call(context, obj[key], key, obj) == = ブレーカー) return;
}
}
}
このメソッドには文があります



コードをコピー
コードは次のとおりです: if (obj.length === obj.length) 理解できませんでした専門家に指摘されて、ずっと見ていたら、この文は

コードをコピー
に相当します。 if (typeof obj.length === 'number') は、要素が数値型であるかどうかを判断するために使用されます。 typeof と Object.prototype.toString は一般的な書き方です。最後のは一般的ではないため、一般の人には理解するのが困難です。
一部のライブラリには、型判定のためのツール関数があります。



コードをコピー
コードは次のとおりです。 function isNumber1(a){ return typeof a === 'number' }

または Object.prototype.toString を使用します



コードをコピーします
コードは次のとおりです: function isNumber2(a) { return Object.prototype .toString.call(a ) === '[オブジェクト番号]' }

このように変更されました



コードをコピー
コードは次のとおりです: function isNumber3(a){ return a === a }

さまざまなタイプでテスト



コードをコピー
コードは次のとおりです。 var arr = ['1'、true、false、未定義、null、{}、[]、1] for (var i=0; iconsole.log(isNumber3(arr) [i]))
}


結果として、配列内の最後の項目のみが true になります。つまり、数値型 a === a のみが true となります。
なぜ typeof を使用しないのかというと、理論的には文字列比較ではすべての文字を走査する必要があり、パフォーマンスは文字列の長さに直接比例するからです。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。