IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    The useful Javascript prototype functions

    Winson发表于 2022-01-18 07:04:09
    love 0

    I want to share some Javascript prototype functions as below:

    String.prototype.format = function (n, x, s, c) {
        /// <summary>
        /// Number.prototype.format(n, x, s, c)
        /// Example:
        /// 12345678.9.format(2, 3, ',', '.');  // "12,345,678.90"
        /// 123456.789.format(4, 4, ' ', ':');  // "12 3456:7890"
        /// 12345678.9.format(0, 3, '-');       // "12-345-679"
        /// </summary>
        /// <param name="n" type="type">length of decimal</param>
        /// <param name="x" type="type">length of whole part</param>
        /// <param name="s" type="type">sections delimiter</param>
        /// <param name="c" type="type">decimal delimiter</param>
        /// <returns type=""></returns>
        var re = '\\d(?=(\\d{' + (x || 3) + '})+' + (n > 0 ? '\\D' : '$') + ')';
        // console.log(this.toString());
        if (this.toString()) {
            var item = this.toString().replace(/,/g, '');
            var num = Number(item).toFixed(Math.max(0, ~~n));
            return (c ? num.replace('.', c) : num).replace(new RegExp(re, 'g'), '$&' + (s || ','));
        }
        return '';
    };
    
    
    String.prototype.replaceAll = function (search, replacement) {
        /// <summary>
        /// Replace all string in js
        /// </summary>
        /// <param name="search" type="type"></param>
        /// <param name="replacement" type="type"></param>
        /// <returns type=""></returns>
        var target = this;
        return target.replace(new RegExp(search, 'g'), replacement);
    };
    
    
    String.prototype.startsWith = function (word) {
        /// <summary>
        /// check whether starts With the word
        /// </summary>
        /// <param name="word" type="type"></param>
        /// <returns type=""></returns>
        return (this.indexOf(word) == 0);
    };
    
    //js startsWith function
    String.prototype.endsWith = function (word) {
        /// <summary>
        /// check whether ends with the word
        /// </summary>
        /// <param name="word" type="type"></param>
        /// <returns type=""></returns>
        return str.indexOf(word, str.length - word.length) !== -1;
    };
    
    Date.prototype.addMonths = function (m) {
        /// <summary>
        /// Add months for date object
        /// </summary>
        /// <param name="m" type="type"></param>
        /// <returns type=""></returns>
        var d = new Date(this);
        var years = Math.floor(m / 12);
        var months = m - (years * 12);
        if (years) d.setFullYear(d.getFullYear() + years);
        if (months) d.setMonth(d.getMonth() + months);
        return d;
    }
    
    Date.prototype.addDays = function (days) {
        /// <summary>
        /// Add days for date object
        /// </summary>
        /// <param name="days" type="type"></param>
        /// <returns type=""></returns>
        var dat = new Date(this.valueOf());
        dat.setDate(dat.getDate() + days);
        return dat;
    }
    
    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find
    // find the element in array
    // e.g  
    //var currItem = dataSource.find(function (ds) {
    //    return ds.startDate.getTime() == date.getTime()
    //});
    if (!Array.prototype.find) {
        Object.defineProperty(Array.prototype, 'find', {
            value: function (predicate) {
                // 1. Let O be ? ToObject(this value).
                if (this == null) {
                    throw new TypeError('"this" is null or not defined');
                }
    
                var o = Object(this);
    
                // 2. Let len be ? ToLength(? Get(O, "length")).
                var len = o.length >>> 0;
    
                // 3. If IsCallable(predicate) is false, throw a TypeError exception.
                if (typeof predicate !== 'function') {
                    throw new TypeError('predicate must be a function');
                }
    
                // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.
                var thisArg = arguments[1];
    
                // 5. Let k be 0.
                var k = 0;
    
                // 6. Repeat, while k < len
                while (k < len) {
                    // a. Let Pk be ! ToString(k).
                    // b. Let kValue be ? Get(O, Pk).
                    // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).
                    // d. If testResult is true, return kValue.
                    var kValue = o[k];
                    if (predicate.call(thisArg, kValue, k, o)) {
                        return kValue;
                    }
                    // e. Increase k by 1.
                    k++;
                }
    
                // 7. Return undefined.
                return undefined;
            }
        });
    }
    
    
    if (!Number.prototype.padLeft) {
        Number.prototype.padLeft = function (n, str) {
            /// <summary>
            /// pad left with 0
            /// e.g.  console.log((23).padLeft(5));     //=> '00023'
            /// </summary>
            /// <param name="n" type="type"></param>
            /// <param name="str" type="type"></param>
            /// <returns type=""></returns>
            return (this < 0 ? '-' : '') +
                    Array(n - String(Math.abs(this)).length + 1)
                     .join(str || '0') +
                   (Math.abs(this));
        }
    }
    
    // https://tc39.github.io/ecma262/#sec-array.prototype.includes
    if (!Array.prototype.includes) {
        Object.defineProperty(Array.prototype, 'includes', {
            value: function (searchElement, fromIndex) {
    
                if (this == null) {
                    throw new TypeError('"this" is null or not defined');
                }
    
                // 1. Let O be ? ToObject(this value).
                var o = Object(this);
    
                // 2. Let len be ? ToLength(? Get(O, "length")).
                var len = o.length >>> 0;
    
                // 3. If len is 0, return false.
                if (len === 0) {
                    return false;
                }
    
                // 4. Let n be ? ToInteger(fromIndex).
                //    (If fromIndex is undefined, this step produces the value 0.)
                var n = fromIndex | 0;
    
                // 5. If n ≥ 0, then
                //  a. Let k be n.
                // 6. Else n < 0,
                //  a. Let k be len + n.
                //  b. If k < 0, let k be 0.
                var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
    
                function sameValueZero(x, y) {
                    return x === y || (typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y));
                }
    
                // 7. Repeat, while k < len
                while (k < len) {
                    // a. Let elementK be the result of ? Get(O, ! ToString(k)).
                    // b. If SameValueZero(searchElement, elementK) is true, return true.
                    if (sameValueZero(o[k], searchElement)) {
                        return true;
                    }
                    // c. Increase k by 1. 
                    k++;
                }
    
                // 8. Return false
                return false;
            }
        });
    }
    

     459 total views

    The post The useful Javascript prototype functions appeared first on Coder Blog.



沪ICP备19023445号-2号
友情链接