JS一般的に使用される機能

様々なビジネス開発しかし、データ処理の多くが悪い遭遇し、データの処理と不可分です。検索エンジンの助けを求めるために必要で、この時間。この方法は、非常に低い効率であるが、作者の個性に応じて、独自の味を保証することはできません。したがって、このテキストは、開発の効率を向上させるためには、携帯のブラウザで使用されている時刻形式、電話番号、電子メールの検証を処理するよう、JS一般的なビジネス機能のマニュアルが含まれています

 

JS一般的に使用される機能

1.時刻フォーマット

インタフェースは、時間の表示を刻々と変化するので、処理時間の関数では、その重要性は自明です。

export function formatDate (oldDate, fmt) {  
  let date = new Date()  
  if (typeof oldDate === 'string' || typeof oldDate === 'number') { date = new Date(+oldDate) } else { date = oldDate } if (/(y+)/.test(fmt)) { fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length)) } let o = { 'M+': date.getMonth() + 1, 'd+': date.getDate(), 'h+': date.getHours(), 'm+': date.getMinutes(), 's+': date.getSeconds() } function padLeftZero (str) { return ('00' + str).substr(str.length) } for (let k in o) { if (new RegExp(`(${k})`).test(fmt)) { let str = o[k] + '' fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : padLeftZero(str)) } } return fmt }

 

FormatDateには2つのパラメータを受け入れ、OLDDATE型は日付、文字列、数値することができます。時間は本当に多くの、だけでなく、非常に便利を見つけ、JSは、弱く型付けされた言語であるので、私は今に対処するための統一されたタイムスタンプなどのデータの文字列と数のタイプはタイムスタンプを渡されますので。YYYY-MM-DD HH::| MM | DD | HH |月| | mmはそれぞれにマッチした日付|時間|サブキーワードYYYYミリメートル、FMTはタイプフォーマットされています。これはハイフンを交換して自由であり、他のキーワードは唯一の年を除去することができる表示されます。いくつかの例:

 

  • YYYY年MM月DD - > 2019年5月9日7 Ri上
  • 分秒HH MM - > 16分53秒

 

2.「日」応答単位のタイムスタンプを取得します

通常24時間以内に時間の3日間、12未満のデータ、データを取得するので、私はタイムスタンプ機能を得るために、日中に起きます

export function setDate(num) {  return Date.now() + num * 24 * 60 * 60 * 1000}

 

正未来の時間を取得する時間、時間をかけて負取得する時間。例えば

  • 12時間までの時間 - > SETDATE( - 。5)
  • 24時間までの時間 - > SETDATE(-1)
  • 3日後の時間 - > SETDATE(3)

 

3. URL内のパラメータを取得します。

3つのフレームワークの時代に、このアプリケーションのニーズは一見不足してますが、面接はよく見る、頼むか、多くを見つけるために、

単純な実装

var urlParams = new URLSearchParams('?post=1234&action=edit');
console.log(urlParams.get('action')); // "edit"

 

すなわち悪を除き、うまく見えたブラウザのサポートの場合、

複雑な実現

 

function getUrlParams(param){
  // 有赖于浏览器环境, window.location.search 是浏览器函数
  // 意思是:设置或返回从问号 (?) 开始的 URL(查询部分)。       
  var query = window.location.search.substring(1);       
  var vars = query.split("&");       
  for (var i=0;i<vars.length;i++) {               
    var pair = vars[i].split("="); if(pair[0] == param){return pair[1];} } return(false); }

たとえば、次のようにhttp://xuyuechao.top?a=3&b=5&c=8888

  • getUrlParams( 'A') - > 3
  • getUrlParams( 'B') - > 5
  • getUrlParams( 'C') - > 8888

前記移動端末は、ブラウザの種類を判別します

BrowserInfo = {      
  isAndroid: Boolean(navigator.userAgent.match(/android/ig)),      
  isIphone: Boolean(navigator.userAgent.match(/iphone|ipod/ig)),      
  isIpad: Boolean(navigator.userAgent.match(/ipad/ig)),      
  isWeixin: Boolean(navigator.userAgent.match(/MicroMessenger/ig)),      
  isAli: Boolean(navigator.userAgent.match(/AlipayClient/ig)),
  isPhone: Boolean(/(iPhone|iPad|iPod|iOS|Android)/i.test(navigator.userAgent))
}

 

AndroidとAppleの&計算された&マイクロチャネル&アリペイ&それは携帯電話側であるかどうかについて現在主支持で。

次元削減の配列

二次元配列

let arr = [ [1], [2], [3] ]
arr = Array.prototype.concat.apply([], arr); // [1, 2, 3]

 

多次元配列の次元削減

let arr = [1, 2, [3], [[4]]]
arr = arr.flat(3) // [1, 2, 3, 4]

 

フラットな互換性の問題、問題は、携帯電話側ではありません。ブラウザは互換性がエッジではありません。無限は、任意の深さのアレイを充填するために拡張することができます

6.ディープ・コピー

変化値の変化B変数Bを使用して、オブジェクトのコピーは、浅いコピーと呼ばれる、続きます。bに別のコピー深い必要性を取得するには

簡単に処理

function deepClone() {
    return JSON.parse(JSON.stringify(obj)) }

 

それは彼の欠点を持っていた単純なプロセスであるので、それは主にシリアライズし、JSONのデシリアライズの上に使用されています。JSONは、未定義の機能をサポートしているため、これらの状況は失われますが、ほとんどの場合を満たすことができました遭遇しません

複雑なプロセス

複雑なプロセスは、再帰的を使用する必要があります

function deepClone(obj) {  
  function isClass(o) {    
  if (o === null) return "Null"; if (o === undefined) return "Undefined"; return Object.prototype.toString.call(o).slice(8, -1); } var result; var oClass = isClass(obj); if (oClass === "Object") { result = {}; } else if (oClass === "Array") { result = []; } else { return obj; } for (var key in obj) { var copy = obj[key]; if (isClass(copy) == "Object") { result[key] = arguments.callee(copy);//递归调用 } else if (isClass(copy) == "Array") { result[key] = arguments.callee(copy); } else { result[key] = obj[key]; } } return result; }

 

7.&オリフィスを振ります

画像安定化とスロットルはより一般的な状況は、コンテンツ変更メッセージを検索するためである高次のスキル、ビジネスです。でもなくても、違いを見分けることはできますが、初心者の保守コードは、ああ、あなたを崇拝して追加されません。

シェイク

function debounce(func, wait) {
    let timeout;
    return function () { let context = this; let args = arguments; if (timeout) clearTimeout(timeout); timeout = setTimeout(() => { func.apply(context, args) }, wait); } }

 

スロットリング

function throttle(func, wait) {
    let previous = 0;
    return function() { let now = Date.now(); let context = this; let args = arguments; if (now - previous > wait) { func.apply(context, args); previous = now; } } }

 

8.両極端の配列を取得し

function smallest(array){                           
  return Math.min.apply(Math, array);             
}                                                 
function largest(array){                            
  return Math.max.apply(Math, array); } smallest([0, 1, 2.2, 3.3]); // 0 largest([0, 1, 2.2, 3.3]); // 3.3

 

コメントは影年間に感謝して、ES6の実装でこれを補います

let list = [1, 2, 3, 4, 5]
Math.max(...list) // 5
Math.min(...list) // 1

9.小数が決定さ等しいです

function epsEqu(x,y) {  
  return Math.abs(x - y) < Math.pow(2, -52);
}
// 举例
0.1 + 0.2 === 0.3 // false
epsEqu(0.1 + 0.2, 0.3) // true

感謝  IAmFineThanks  上記方法はまた、そう書き込むことができるように提供Number.EPSILON、Number.EPSILON === Math.pow(2、-52)を

function epsEqu(x,y) {  
  return Math.abs(x - y) < Number.EPSILON;
}

 

ユーザ入力が小数である、進数はコンピュータに格納されています。だから、結果がバイアスされるので、我々は直接、非整数を比較するべきではありませんが、どちらが上限、計算に誤りです。マシンイプシロン、イプシロン標準倍精度値と呼ばれるこのような制限は、2 ^ -53(Math.pow(2、-53))であります

要約:

あなたがより良いコードのコメントは歓迎されている場合は、コードのテキストは、必ずしも最適なコードではないかもしれません。

参考文献:

www.jianshu.com/p/c8b86b09d...

www.cnblogs.com/wxydigua/p/...

blog.csdn.net/u014607184/...

rockjins.js.org/2017/02/15/...

 

いくつかは、よりエレガントなJS /読み込みのヒントを作ります

エンジニアのために、再び書き込まれたコードは、何度も変更され、キー出力を介し続きを読む、読みやすさは重要であり、非常に高い読み取り可能なコードの重要性は自明です。

1.オブジェクトの代わりに、スイッチ/場合

公共内容:
let a = 'VIP'

场景 1
if (a === 'VIP') { return 1 } else if (a === 'SVIP') { return 2 } 场景 2 switch(a) { // 感谢 红山老六 的评论指出这部分代码的 bug。现已改正 case 'VIP': return 1 case 'SVIP': return 2 } 场景 3 let obj = { VIP: 1, SVIP: 2 }

 

ここでは、特定のシーンを提供するか、ご自身の判断を使用するだけの方法です。払い戻しを持っている|支払い|私は、シーンの多くを使用し、そのような支払い状況などの状態マップ中国の意味は、通常、この値を1、2、3を取っているが、要件のリストは、対応する中国の状態は払っていない示しています待ちます

2. ||と&&魔法

// 场景 1
function b(a) {
  if (a) {
    return a
  } else { return '' } } // 场景 2 function b(a) { return a || '' }

上記は、また、短絡処理と呼ばれる||使用、です。条件は一般的であるが、彼は実際には声明の中で直接使用する場合。最初の引数の値がtrueの場合、最初のパラメータは、二番目のパラメータがかかります真の値がないときには、最初のパラメータを取ります。&&と||ちょうど反対。最初の引数は、パラメータの第2の値を取ります本当です

 

おすすめ

転載: www.cnblogs.com/wakbook/p/11551242.html