JavaScript は多くの素晴らしい機能を備えています。この記事では、作業効率の向上とコードのデバッグに役立つ 50 以上の実用的なツール関数を紹介します。 1. isStatic: シンボル以外のデータが元のデータであるかどうかを確認します。 関数isStatic(値) { 戻る ( typeof 値 === '文字列' || typeof 値 === 'number' || typeof 値 === 'boolean' || typeof 値 === 'undefined' || 値 === null ) } 2. isPrimitive: データがプリミティブデータであるかどうかをチェックする 関数isPrimitive(値) { isStatic(value) を返します || typeof value === 'symbol' } 3. isObject: データが参照型データであるかどうかを判断します (例: 配列、関数、オブジェクト、正規表現、新しい Number()、新しい String()) 関数isObject(値) { type = typeof 値とします。 戻り値 != null && (type == 'object' || type == 'function'); } 4. isObjectLike: 値がクラス オブジェクトであるかどうかを確認します。値がクラスオブジェクトの場合、null であってはならず、typeof 後の結果は "object" になります。 関数isObjectLike(値) { 戻り値 != null && typeof value == 'object'; } 5. getRawType: データ型を取得します。返される結果は、Number、String、Object、Array などになります。 関数 getRawType(値) { Object.prototype.toString.call(value).slice(8, -1) を返します。 } // getoRawType([]) ⇒ 配列 6. isPlainObject: データがオブジェクト型かどうかを判定する 関数isPlainObject(obj) { Object.prototype.toString.call(obj) === '[object Object]' を返します。 } 7. isArray: データが配列型かどうかを判定する(Array.isArrayと互換性のある記述) 関数isArray(arr) { return Object.prototype.toString.call(arr) === '[オブジェクト配列]' } //isArray を Array にマウントします。Array.isArray = Array.isArray || isArray; 8. isRegExp: データが正規オブジェクトであるかどうかを判定する 関数isRegExp(値) { Object.prototype.toString.call(value) === '[object RegExp]' を返します } 9. isDate: データが時間オブジェクトであるかどうかを判定する 関数isDate(値) { Object.prototype.toString.call(value) === '[object Date]' を返します } 10. isNative: 値がブラウザの組み込み関数であるかどうかを判定する 組み込み関数 toString 以降のメインコードブロックは [ネイティブコード] ですが、非組み込み関数は関連コードであるため、非組み込み関数はコピーできます (toString 以降、先頭と末尾が切り取られ、Function から変換されます) 関数isNative(値) { 戻り値の型 === 'function' && /native code/.test(value.toString()) } 11. isFunction: 値が関数かどうかをチェックする 関数isFunction(値) { return Object.prototype.toString.call(value) === '[オブジェクト関数]' } 12. isLength: 値が有効な配列の長さであるかどうかをチェックする 関数 isLength(値) { 戻り値の型 value == 'number' && value > -1 && value % 1 == 0 && value <= Number.MAX_SAFE_INTEGER; } 13. isArrayLike: 値が配列のようなものかどうかをチェックする 値が配列のようなものとみなされる場合、それは関数ではなく、value.length は 0 以上 Number.MAX_SAFE_INTEGER 以下の整数になります。ここでは文字列も配列のように扱われます。 関数isArrayLike(値) { 戻り値 != null && isLength(value.length) && !isFunction(value); } 14. isEmpty: 値が空かどうかをチェックする null の場合は、直接 true を返します。配列のようなオブジェクトの場合は、データの長さを決定します。Object オブジェクトの場合は、属性があるかどうかを判断します。その他のデータの場合は、直接 false を返します (代わりに true を返すこともできます)。 関数 isEmpty(値) { 値 == null の場合 { true を返します。 } if (isArrayLike(値)) { !value.length を返します。 } そうでなければ (isPlainObject(値)) { for (let key in value) { if (hasOwnProperty.call(値、キー)) { false を返します。 } } } false を返します。 } 15. キャッシュ: メモリ機能: キャッシュ機能の計算結果 関数キャッシュ(fn) { キャッシュを Object.create(null); にします。 関数cachedFn(str)を返す{ hit = cache[str]とします。 ヒットを返す || (cache[str] = fn(str)) } } 16. camelize: 水平線をキャメルケースに変換する camelizeRE = /-(\w)/g とします。 関数 camelize(str) { str.replace(camelizeRE, 関数(_, c) を返す { c を返します ? c.toUpperCase() : ''; }) } //ab-cd-ef ==> abCdEf //メモリ関数を使用する let _camelize = cached(camelize) 17. ハイフネート: キャメルケース命名をハイフン付き命名に変換します。文字列を分割し、-で接続し、小文字に変換します。 hyphenateRE = /\B([AZ])/g とします。 関数ハイフネーション(str){ str.replace(hyphenateRE, '-$1').toLowerCase() を返す } //abCd ==> ab-cd //メモ化された関数を使用する let _hyphenate = cached(hyphenate); 18. capitalize: 文字列の最初の文字を大文字にする 関数 capitalize(str) { str.charAt(0).toUpperCase() + str.slice(1) を返す } //abc ==> アブ //メモ化された関数を使用する let _capitalize = cached(capitalize) 19. extend: ターゲットオブジェクトに属性をミックスする 関数 extend(to, _form) { for(let key in _form) { to[キー] = _form[キー]; } 戻る } 20. Object.assign: オブジェクトプロパティのコピー、浅いコピー オブジェクト.assign = オブジェクト.assign || 関数() { if (arguments.length == 0) throw new TypeError('undefined または null をオブジェクトに変換できません'); ターゲット = 引数[0]とします。 args = Array.prototype.slice.call(引数, 1), 鍵; args.forEach(関数(項目) { for (キー in 項目) { item.hasOwnProperty(キー) && (ターゲット[キー] = アイテム[キー]) } }) リターンターゲット } Object.assign を使用してオブジェクトを複製します。 clone = Object.assign({}, target); シンプルなディープクローニングでは、JSON.parse() と JSON.stringify() を使用できます。これら 2 つの API は JSON データを解析するため、シンボル以外のプリミティブ型、配列、およびオブジェクトのみを解析できます。 clone = JSON.parse( JSON.stringify(target) ) を実行します。 21.クローン:データのクローン、ディープクローンが可能 プリミティブ型、time、regular、error、array、objectのクローンルールを以下に示します。他のルールは自分で追加できます。 関数クローン(値、深層) { if (isPrimitive(値)) { 戻り値 } if (isArrayLike(value)) { // 配列のような値 = Array.prototype.slice.call(vall) 戻り値.map(item => deep ? clone(item, deep) : item) } else if (isPlainObject(value)) { // オブジェクトです let target = {}, key; for (キー in 値) { value.hasOwnProperty(key) && ( target[key] = deep ? clone(value[key], value[key] )) } } type = getRawType(値); スイッチ(タイプ) { ケース '日付': ケース '正規表現': case 'エラー': value = new window[type](value); break; } 戻り値 } 22. さまざまなブラウザとプラットフォームを識別する // 動作環境はブラウザです。let inBrowser = typeof window !== 'undefined'; //動作環境はWeChatです let inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform; weexPlatform = inWeex && WXEnvironment.platform.toLowerCase(); とします。 //ブラウザのUA判定 let UA = inBrowser && window.navigator.userAgent.toLowerCase(); isIE = UA && /msie|trident/.test(UA) とします。 isIE9 = UA && UA.indexOf('msie 9.0') > 0 とします。 isEdge = UA && UA.indexOf('edge/') > 0 とします。 isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android'); とします。 isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios'); とします。 isChrome = UA && /chrome\/\d+/.test(UA) && !isEdge; とします。 23. getExplorerInfo: ブラウザ情報を取得する 関数 getExplorerInfo() { t = navigator.userAgent.toLowerCase() とします。 0 <= t.indexOf("msie") を返す? { //ie < 11 タイプ: "IE", バージョン: Number(t.match(/msie ([\d]+)/)[1]) } : !!t.match(/trident\/.+?rv:(([\d.]+))/) ? { // つまり 11 タイプ: "IE", バージョン: 11 } : 0 <= t.indexOf("edge") ? { タイプ:「エッジ」、 バージョン: Number(t.match(/edge\/([\d]+)/)[1]) } : 0 <= t.indexOf("firefox") ? { タイプ: "Firefox", バージョン: Number(t.match(/firefox\/([\d]+)/)[1]) } : 0 <= t.indexOf("chrome") ? { タイプ: "Chrome", バージョン: Number(t.match(/chrome\/([\d]+)/)[1]) } : 0 <= t.indexOf("opera") ? { タイプ:「オペラ」、 バージョン: Number(t.match(/opera.([\d]+)/)[1]) } : 0 <= t.indexOf("Safari") ? { タイプ:「Safari」、 バージョン: Number(t.match(/version\/([\d]+)/)[1]) } : { タイプ: t, バージョン: -1 } } 24. isPCBroswer: PCブラウザモードかどうかをチェックする 関数isPCBroswer() { e = navigator.userAgent.toLowerCase() とします。 , t = "ipad" == e.match(/ipad/i) , i = "iphone" == e.match(/iphone/i) , r = "midp" == e.match(/midp/i) , n = "rv:1.2.3.4" == e.match(/rv:1.2.3.4/i) , a = "ucweb" == e.match(/ucweb/i) , o = "android" == e.match(/android/i) , s = "windows ce" == e.match(/windows ce/i) , l = "windows mobile" == e.match(/windows mobile/i); 戻り値 !(t || i || r || n || a || o || s || l) } 25. unique: 配列から重複を削除し、新しい配列を返す 関数 unique(arr){ if(!isArrayLink(arr)){ //配列のようなオブジェクトではない return arr } 結果 = [] objarr = [] とします obj = Object.create(null) とします。 arr.forEach(アイテム => { if(isStatic(item)){//シンボルを除いた生データです。let key = item + '_' + getRawType(item); if(!obj[キー]){ obj[キー] = true 結果.push(アイテム) } }else{//参照型とシンボル if (!objarr.includes(item)){ objarr.push(アイテム) 結果.push(アイテム) } } }) 結果を返す } 26. Setの簡単な実装 window.Set = window.Set || (関数() { 関数Set(arr){ this.items = arr ? unique(arr): []; this.size = this.items.length; // 配列のサイズ} プロトタイプを設定する = { 追加: 関数 (値) { // 要素を追加します。要素がすでに存在する場合は、それをスキップして Set 構造体自体を返します。 if (!this.has(値)) { this.items.push(値); this.size++; } これを返します。 }, クリア: 関数() { // すべてのメンバーをクリアします。戻り値はありません。 this.items = [] サイズ = 0 }, 削除: 関数 (値) { //値を削除し、削除が成功したかどうかを示すブール値を返します。 this.items.some((v, i) => { を返します。 if(v === 値){ this.items.splice(i,1) 真を返す } 偽を返す }) }, 関数 (値) { //値がセットのメンバーであるかどうかを示すブール値を返します。 this.items.some(v => v === 値) を返します }, 値: 関数 () { this.itemsを返す }, } Set を返します。 }()); 27. repeat: n 個の str で構成される繰り返し文字列を生成します。これは配列を埋めるために変更することができます。 関数 repeat(str, n) { res = '' とします。 while(n) { (n % 2 === 1)の場合{ 文字列 += 0; } n > 1の場合{ 文字列 + = 文字列; } 1 より大きい } 戻り値 }; //repeat('123',3) ==> 123123123 28. dateFormater: 時刻のフォーマット 関数 dateFormater(formater, t){ date = t ? new Date(t) とします: new Date(), Y = date.getFullYear() + ''、 M = date.getMonth() + 1、 D = date.getDate(), H = date.getHours(), m = date.getMinutes(), s = date.getSeconds(); 戻り値 formater.replace(/YYYY|yyyy/g,Y) .replace(/YY|yy/g,Y.substr(2,2)) .replace(/MM/g,(M<10?'0':'') + M) .replace(/DD/g,(D<10?'0':'') + D) .replace(/HH|hh/g,(H<10?'0':'') + H) .replace(/mm/g,(m<10?'0':'') + m) .replace(/ss/g,(s<10?'0':'') + s) } // dateFormater('YYYY-MM-DD HH:mm', t) ==> 2019-06-26 18:30 // dateFormater('YYYYMMDDHHmm', t) ==> 201906261830 29. dateStrForma: 指定された文字列をある時間形式から別の時間形式に変換します。 Fromの形式はstrの位置に対応している必要があります 関数 dateStrForma(str, from, to){ //'20190626' 'YYYYMMDD' 'YYYY 年 MM 月 DD 日' 文字列 += '' Y = ''とする if(~(Y = from.indexOf('YYYY'))){ Y = str.substr(Y, 4) to = to.replace(/YYYY|yyyy/g,Y) }そうでない場合(~(Y = from.indexOf('YY'))){ Y = str.substr(Y, 2) to = to.replace(/YY|yy/g,Y) } k,iとする ['M','D','H','h','m','s'].forEach(s => { i = from.indexOf(s+s) k = ~i ? str.substr(i, 2): '' to = to.replace(s+s, k) }) 戻る } // dateStrForma('20190626', 'YYYYMMDD', 'YYYY 年 MM 月 DD 日') ==> 2019 年 6 月 26 日 // dateStrForma('121220190626', '----YYYYMMDD', 'YYYY 年 MM 月 DD 日') ==> 2019 年 6 月 26 日 // dateStrForma('20190626', 'YYYY 年 MM 月 DD 日', 'YYYYMMDD') ==> 20190626 // 正規表現を使用してこれを実現することもできます //'2019-06-26'.replace(/(\d{4})year(\d{2})month(\d{2})day/, '$1-$2-$3') ==> 2019-06-26 30. getPropByPath: 文字列パスに基づいてオブジェクトのプロパティを取得します: 'obj[0].count' 関数 getPropByPath(obj, path, strict) { tempObj = obj とします。 path = path.replace(/\[(\w+)\]/g, '.$1'); //[0]を.0に変換 path = path.replace(/^\./, ''); //先頭の . を削除します。 let keyArr = path.split('.'); // に従ってカットします。let i = 0; (let len = keyArr.length; i < len - 1; ++i) { if (!tempObj && !strict) が中断されます; key = keyArr[i]とします。 if (キーがtempObjにある場合) { tempObj = tempObj[キー]; } それ以外 { if (strict){// 厳密モードをオンにし、対応するキー値が見つからない場合はエラーをスローします。throw new Error('有効なプロパティ パスをフォーム項目に転送してください!'); } 壊す; } } 戻る { o: tempObj, //元のデータ k: keyArr[i], //キー値 v: tempObj ? tempObj[keyArr[i]] : null //キー値に対応する値}; }; 31. GetUrlParam: Urlパラメータを取得してオブジェクトを返す 関数 GetUrlParam(){ url = document.location.toString(); とします。 arrObj = url.split("?"); とします。 パラメータをObject.create(null)にします。 (arrObj.length > 1)の場合{ arrObj = arrObj[1].split("&"); arrObj.forEach(item=>{ アイテム = item.split("="); パラメータ[項目[0]] = 項目[1] }) } パラメータを返します。 } // ?a=1&b=2&c=3 ==> {a: "1", b: "2", c: "3"} 32. downloadFile: base64 データエクスポートファイル、ファイルダウンロード 関数downloadFile(ファイル名, データ) { DownloadLink を document.createElement('a') にします。 if (ダウンロードリンク) { document.body.appendChild(ダウンロードリンク); DownloadLink.style = '表示: なし'; DownloadLink.download = ファイル名; ダウンロードリンク.href = データ; ドキュメントの作成イベントの場合 DownloadEvt を document.createEvent('MouseEvents') に設定します。 DownloadEvt.initEvent('click', true, false); ダウンロードリンクをディスパッチイベント(ダウンロードイベント)に変換します。 } そうでない場合 (document.createEventObject) { ダウンロードリンク.fireEvent('onclick'); } そうでない場合 (typeof DownloadLink.onclick == 'function') { ダウンロードリンク.onclick(); } document.body.removeChild(ダウンロードリンク); } } 33. toFullScreen: フルスクリーン 関数toFullScreen() { elem = document.body;とします。 elem.webkitリクエストフルスクリーン ? elem.webkitRequestFullScreen() : elem.mozRequestFullScreen ? elem.mozRequestFullScreen() : elem.msRequestFullscreen ? elem.msRequestFullscreen() : elem.requestFullScreen ? elem.requestFullScreen() : alert("ブラウザは全画面表示をサポートしていません"); } 34. exitFullscreen: 全画面表示を終了する 関数exitFullscreen() { elem = parent.document;とします。 elem.webkitキャンセルフルスクリーン ? elem.webkitCancelFullScreen() : elem.mozキャンセル全画面表示 ? elem.mozCancelFullScreen() : elem.cancelFullScreen ? elem.cancelFullScreen() :elem.msフルスクリーンを終了 ? elem.msExitFullscreen() : elem.exitフルスクリーン ? elem.exitFullscreen() : alert("切り替えに失敗しました。Esc キーを押して終了してください"); } 35. requestAnimationFrame: ウィンドウアニメーション window.requestAnimationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || ウィンドウ.msRequestAnimationFrame || window.oRequestAnimationFrame || 関数(コールバック){ //setTimeout を 60 フレーム/秒にできるだけ近づけるには、window.setTimeout(callback, 1000 / 60); } ウィンドウをキャンセルします。 window.webkit アニメーションフレームをキャンセルします || window.mozCancelAnimationFrame || ウィンドウ.msCancelAnimationFrame || window.oCancelAnimationFrame || 関数 (id) { //setTimeout を 60 フレーム/秒にできるだけ近づけるには、window.clearTimeout(id); } 36. _isNaN: データが数値でないかどうかをチェックする 関数_isNaN(v){ 戻り値 !(typeof v === '文字列' || typeof v === '数値') || isNaN(v) } 37. max: 配列内の非 NaN データの最大値を見つける 関数max(arr){ arr = arr.filter(item => !_isNaN(item)) arr.length を返します? Math.max.apply(null, arr): undefined } //max([1, 2, '11', null, 'fdf', []]) ==> 11 38. min: 配列内の非NaNデータの最小値を見つける 関数min(arr){ arr = arr.filter(item => !_isNaN(item)) arr.length を返します? Math.min.apply(null, arr): undefined } //min([1, 2, '11', null, 'fdf', []]) ==> 1 39. random: 上下の乱数を返します。 (下限と上限は正でも負でも、大きくても小さくても構いませんが、NaN 以外のデータである必要があります) 関数 random(lower, upper) { 下 = +下 || 0 上 = +上 || 0 Math.random() * (上限 - 下限) + 下限を返します。 } //ランダム(0, 0.5) ==> 0.3567039135734613 //ランダム(2, 1) ===> 1.6718418553475423 //ランダム(-2, -1) ==> -1.4474325452361945 40. Object.keys: 指定されたオブジェクトの列挙可能なプロパティの配列を返します。 Object.keys = Object.keys || 関数キー(オブジェクト) { if (オブジェクト === null || オブジェクト === 未定義) { throw new TypeError('undefined または null をオブジェクトに変換できません'); } 結果 = [] とします。 if (isArrayLike(オブジェクト) || isPlainObject(オブジェクト)) { for (let key in object) { object.hasOwnProperty(キー) && (result.push(キー)) } } 結果を返します。 } 41. Object.values: 指定されたオブジェクトのすべての列挙可能なプロパティ値の配列を返します。 Object.values = Object.values || 関数値(オブジェクト) { if (オブジェクト === null || オブジェクト === 未定義) { throw new TypeError('undefined または null をオブジェクトに変換できません'); } 結果 = [] とします。 if (isArrayLike(オブジェクト) || isPlainObject(オブジェクト)) { for (let key in object) { object.hasOwnProperty(キー) && (result.push(オブジェクト[キー])) } } 結果を返します。 } 42. arr.fill: 配列を開始位置から終了位置まで(終了位置は含まない)値で埋め、元の配列を返します。 Array.prototype.fill = Array.prototype.fill || 関数 fill(値, 開始, 終了) { ctx = this とします length = ctx.length; とします。 開始 = parseInt(開始) if (isNaN(開始)) { 開始 = 0 }それ以外の場合 (開始 < 0) { 開始 = -開始 > 長さ ? 0 : (長さ + 開始); } 終了 = parseInt(終了) if(isNaN(end) || end > length){ 終わり = 長さ }それ以外の場合 (終了 < 0) { 終了 += 長さ; } (開始 < 終了) の間 { ctx[start++] = 値; } ctx を返します。 } //配列(3).fill(2) ===> [2, 2, 2] 43. arr.includes: 配列に指定された値が含まれているかどうかを判定するために使用されます。含まれている場合はtrueを返し、含まれていない場合はfalseを返します。クエリを開始する位置を指定できます。 Array.prototype.includes = Array.prototype.includes || 関数は(値、開始)を含みます { ctx = this とします。 length = ctx.length; とします。 開始 = parseInt(開始) if(isNaN(開始)) { 開始 = 0 } そうでない場合 (開始 < 0) { 開始 = -開始 > 長さ ? 0 : (長さ + 開始); } index = ctx.indexOf(値)とします。 インデックス >= 開始を返します。 } 44. テストに合格した配列の最初の要素の値を返す(関数fnでの判定) Array.prototype.find = Array.prototype.find || 関数 find(fn, ctx) { ctx = ctx || これ; 結果を出す; ctx.some((値、インデックス、arr)、thisValue) => { fn(値、インデックス、arr) を返します。(結果 = 値、true) : false }) 結果を返す } 45. arr.findIndex: テストに合格した配列の最初の要素のインデックスを返します(関数fnで判断されます) Array.prototype.findIndex = Array.prototype.findIndex || 関数 findIndex(fn, ctx){ ctx = ctx || これ 結果を出す; ctx.some((値、インデックス、arr)、thisValue) => { fn(値、インデックス、arr) を返しますか? (結果 = インデックス、true) : false }) 結果を返す } 46. performance.timing: performance.timing を使用したパフォーマンス分析 window.onload = 関数() { setTimeout(関数() { t = パフォーマンス.タイミング; console.log('DNS クエリ時間:' + (t.domainLookupEnd - t.domainLookupStart).toFixed(0)) console.log('TCP接続時間:' + (t.connectEnd - t.connectStart).toFixed(0)) console.log('リクエスト要求時間:' + (t.responseEnd - t.responseStart).toFixed(0)) console.log('DOM ツリーの解析にかかった時間:' + (t.domComplete - t.domInteractive).toFixed(0)) console.log('白い画面の時間:' + (t.responseStart - t.navigationStart).toFixed(0)) console.log('domready時間: ' + (t.domContentLoadedEventEnd - t.navigationStart).toFixed(0)) console.log('onload 時間: ' + (t.loadEventEnd - t.navigationStart).toFixed(0)) if (t = パフォーマンス.メモリ) { console.log('js メモリ使用量の割合:' + (t.usedJSHeapSize / t.totalJSHeapSize * 100).toFixed(2) + '%') } }) } 47. 特定のキーボードイベントを無効にする document.addEventListener('keydown', 関数(イベント) { 戻る !( 112 == event.keyCode || //F1を無効にする 123 == event.keyCode || //F12を無効にする event.ctrlKey && 82 == event.keyCode || //ctrl+Rを無効にする event.ctrlKey && 18 == event.keyCode || //ctrl+N を無効にする event.shiftKey && 121 == event.keyCode || //shift+F10 を無効にする event.altKey && 115 == event.keyCode || // alt+F4 を無効にする "A" == event.srcElement.tagName && event.shiftKey //タグ a の Shift キーを押しながらクリックを無効にする || (event.returnValue = false) }); 48. 右クリック、選択、コピーを無効にする ['コンテキストメニュー', '選択開始', 'コピー'].forEach(function(ev) { document.addEventListener(ev, 関数(イベント) { 戻りイベント.returnValue = false; }) }); 49. numAdd - 数値の加算を計算する 関数numAdd(num1, num2) { baseNum、baseNum1、baseNum2 とします。 試す { baseNum1 = num1.toString().split(".")[1].length; } キャッチ (e) { ベース番号1 = 0; } 試す { baseNum2 = num2.toString().split(".")[1].length; } キャッチ (e) { ベース番号2 = 0; } baseNum = Math.pow(10, Math.max(baseNum1, baseNum2)); (num1 * baseNum + num2 * baseNum) / baseNum を返します。 }; 50. numSub - 数値の減算を計算する 関数numSub(num1, num2) { baseNum、baseNum1、baseNum2 とします。 let precision; // 精度 try { baseNum1 = num1.toString().split(".")[1].length; } キャッチ (e) { ベース番号1 = 0; } 試す { baseNum2 = num2.toString().split(".")[1].length; } キャッチ (e) { ベース番号2 = 0; } baseNum = Math.pow(10, Math.max(baseNum1, baseNum2)); 精度 = (baseNum1 >= baseNum2) ? baseNum1 : baseNum2; ((num1 * baseNum - num2 * baseNum) / baseNum).toFixed(精度) を返します。 }; 51. numMulti - 数値の乗算を計算します 関数numMulti(num1, num2) { baseNum = 0 とします。 試す { baseNum += num1.toString().split(".")[1].length; } キャッチ (e) { } 試す { baseNum += num2.toString().split(".")[1].length; } キャッチ (e) { } 戻り値 Number(num1.toString().replace(".", "")) * Number(num2.toString().replace(".", "")) / Math.pow(10, baseNum); }; 52. numDiv - 数値の割り算を計算します 関数numDiv(num1, num2) { baseNum1 = 0、baseNum2 = 0 とします。 baseNum3、baseNum4 とします。 試す { baseNum1 = num1.toString().split(".")[1].length; } キャッチ (e) { ベース番号1 = 0; } 試す { baseNum2 = num2.toString().split(".")[1].length; } キャッチ (e) { ベース番号2 = 0; } (数学) { baseNum3 = Number(num1.toString().replace(".", "")); baseNum4 = Number(num2.toString().replace(".", "")); 戻り値: (baseNum3 / baseNum4) * pow(10, baseNum2 - baseNum1); } }; 以上で、JavaScript の 50 以上の実用的なツール関数のまとめの記事は終了です。JavaScript の実用的なツール関数に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: MySQL の低速クエリの最適化: 理論と実践からの制限の利点
Zabbix バージョン 3.0 以降、Zabbix サーバー、Zabbix プロキシ、Zabbi...
前回の記事では、Docker を使用して Laravel アプリケーションをデプロイする方法について...
この記事では、CSS を使用して検索機能付きのナビゲーション バーを作成する方法を説明します。以下の...
ここでは、通常ヘッダーとフッターに対して行われるインクルード ファイルを使用している可能性があります...
マインドマップ彼はおそらく次のように見えるでしょう: インターネット上の実装のほとんどは d3.js...
目次1.watchは一般的なデータ(数値、文字列、ブール値)の変更を監視します。 1. 数値2. 文...
——「MySQL in Simple Terms (第 2 版)」からのメモ数値型整数型バイト最小最...
まず、MySQL公式サイトからインストールパッケージをダウンロードします。MySQLはオープンソース...
この記事では、CSSの透明な境界線の背景クリップの素晴らしい使い方を主に紹介し、みんなと共有し、自分...
目次1. ブラウザのクッキーの値を取得する2. RGBを16進数に変換する3. クリップボードにコピ...
1. 遭遇したいくつかの問題2008 年にパフォーマンス テストを行っていたとき、パフォーマンス テ...
目次1. 概要1.1 querySelector() と querySelectorAll() の使...
DREAMWEAVER を開き、新しい HTML を作成します。 。ボディの特性: bgcolor...
mysqladmin ツールの使用形式は次のとおりです。 mysqladmin [オプション] コ...
1. 以前 QT5.13 バージョンをダウンロードしましたが、インストール後、Qtcreator を...