JavaScript の 50 以上のユーティリティ関数の概要

JavaScript の 50 以上のユーティリティ関数の概要

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 をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • よく使われるJavaScriptツールの機能まとめ(ブラウザ環境)
  • JavaScript 共通ツール関数ライブラリの概要
  • JavaScript 共通ツール関数
  • JS開発によく使われるツールの機能(まとめ)
  • JavaScript での Cookie ツール関数のカプセル化のサンプル コード
  • js で実装されたカーソル位置ツール機能の例
  • 2つの便利なJavaScriptツール関数コード
  • Javascript オブジェクトと配列を操作するための JQuery ツール関数の概要
  • 開発効率の向上に役立つ 56 個の実用的な JavaScript ツール関数

<<:  MySQL の低速クエリの最適化: 理論と実践からの制限の利点

>>:  Linux ファイルディレクトリ管理コマンドの概要

推薦する

jQueryはすべてのショッピングカート機能を実装します

目次1. すべて選択2. 商品の数量を増やすか減らす3. 商品の小計を変更する4. 合計と合計額を計...

CSS のフローティング サンプル コードをクリアする方法

概要この記事のフレームワーク図は次のとおりです。 1. フローティングとは一体何でしょうか? W3s...

MySQL における Decimal 型と Float Double 型の違い (詳細説明)

MySQL には、10 進数などの標準データ型だけでなく、float や double などの非標...

MySQL パーティション関数の詳細な説明と例の分析

まず、データベース パーティショニングとは何でしょうか?以前、MySQL のテーブル パーティショニ...

Nginx がサーバーの生存状態をパッシブにチェックする詳細な説明

導入定期的にヘルスチェックを送信して、アップストリーム グループ内の HTTP サーバーのヘルスを監...

Mac OS 10.11 での MySQL 5.7.12 のインストールと設定のチュートリアル

Mac OS 10.11 に MySQL をインストールして設定する方法を、主に写真を使って手順を簡...

Alibaba Cloud ServerにMySQLデータベースをインストールする方法の詳細な説明

序文学習中に Zookeeper をインストールする必要があったため、仮想マシンに常に問題が発生した...

Nginxはドメイン名のアクセス方法を定義しています

最近Nginxを構築しているのですが、ドメイン名でアクセスできません。 nginx 構成ファイル n...

シンプルなID生成戦略: MySQLテーブルからグローバルに一意のIDを生成する実装

グローバル ID を生成する方法は多数あります。ここでは簡単な解決策を紹介します。MySQL の自動...

タオバオモールのホームページ上の大きな画像のデザイン構造に関する分析と意見(写真)

前回、Taobaoの詳細ページを分析した後(クリックして表示)、ショッピングモールの基本テンプレート...

vue3.0 プロジェクトを素早く構築するための手順を完了する

目次1. 3.0をより適切にサポートするには、vue/cliのバージョンが4.5.0以上であることを...

Vue プロジェクトで axios をカプセル化する方法 (http リクエストの統合管理)

1. 要件Vue.js フレームワークを使用してフロントエンド プロジェクトを開発する場合、サーバ...

コピー&ペーストはパッケージングの敵です

OO、デザイン パターン、および多くのオブジェクト指向の原則について話す前に、まず 1 つのことを習...

MySQL テーブル内の重複データを検索して削除する方法の概要

時々、データベース テーブルに重複したデータが大量に保存されます。これらの重複データはリソースを浪費...

MySQLが数十億のトラフィックをサポートする方法

目次1 マスター・スレーブの読み取り・書き込み分離1.1 コア2 マスタースレーブレプリケーション2...