介绍js有哪些内置对象 - 有哪些有用的JavaScript方法可以扩展内置对象?




js对象方法 (14)

扩展内置JavaScript对象(如String,Array,Date,Boolean,Math等)的最有用,最实用的方法是什么?

排列

日期

注意:请为每个答案发布一个扩展方法。

https://code.i-harness.com


的String.format

String.prototype.format = function (values) {

    var regex = /\{([\w-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g;

    var getValue = function (key) {
            if (values == null || typeof values === 'undefined') return null;

            var value = values[key];
            var type = typeof value;

            return type === 'string' || type === 'number' ? value : null;
        };

    return this.replace(regex, function (match) {
        //match will look like {sample-match}
        //key will be 'sample-match';
        var key = match.substr(1, match.length - 2);

        var value = getValue(key);

        return value != null ? value : match;
    });
};

用法:

alert('Program: {key1} {key2}'.format({ 'key1' : 'Hello', 'key2' : 'World' })); //alerts Program: hello world


http://maiaco.com/articles/js/missingArrayFunctions.php有一篇很好的文章描述了六个有用的函数,可以添加到Array原型中。 函数是linearSearch(与另一个答案中给出的indexOf相同),binarySearch,retainAll,removeAll,unique和addAll。 本文还包括六个函数中每个函数的JavaScript代码和示例如何使用它们的示例代码。


Date.toMidnight

Date.prototype.toMidnight = function(){ 
  this.setMinutes(0); 
  this.setSeconds(0); 
  this.setHours(0) 
}

字符串填充:

String.prototype.padLeft = function (length, character) { 
     return new Array(length - this.length + 1).join(character || ' ') + this; 
}
'trial'.padLeft(7, 'X'); // output : 'XXtrial'
'trial'.padLeft(7);      // output : '  trial'



String.prototype.padRight = function (length, character) { 
     return this + new Array(length - this.length + 1).join(character || ' '); 
}
'trial'.padRight(7, 'X'); // output : 'trialXX'
'trial'.padRight(7);      // output : 'trial  '

James Padolsey有大量的String.prototype函数

https://github.com/padolsey/string.prototype

这些包括:

  • camelize
  • 包含
  • 计数
  • 提取
  • 的forEach
  • forEachWord
  • linkify
  • 许多
  • 随机
  • 去掉
  • 相反
  • 缩短
  • 分类
  • toDOM
  • 修剪

像这样使用原型链:

String.prototype.AddWorld = function() { return this+'World' }

"Hello ".AddWorld(); // returns the string "Hello World"

各种列表操作原型总是很棒。 因为你只需要每个帖子一个,我只会发布foldl ,我通过SML发现它(它“折叠”列表,从左到右,当然在折叠器中有一个反向部分)。

Array.prototype.foldl = function(fnc,start) {
    var a = start;
    for (var i = 0; i < this.length; i++) {
        a = fnc(this[i],a);
    }
    return a;
}

一些微不足道的例子可能是:

var l = ["hello" , "world"];
l.foldl(function(i, acc) { return acc+" "+i; }, "") // => returns "hello world"

遗憾的是,标准DOM方法无法返回真正的数组使得很多这样的方法变得毫无用处。 如果你正在使用某种类型的Lib,他们通常会定义这样的方法(map,filter,exists等)。



数组包含:

Array.prototype.contains = function(obj) {
    for (var i=0; i < this.length; i++) {
        if(this[i] === obj) return i;
    }
    return -1;
}

用法:

var arr = [1, 2, 3];
alert(arr.contains(2));

这个小帮助函数会告诉您数组是否包含对象。 如果是,则返回对象的索引,否则返回-1。

免费星期五下午提示:永远不要修改对象原型。 这只是要求整个世界的痛苦 - 我学到了很难:)


这是String.replaceAll()方法的另一个实现

String.prototype.replaceAll = function(search, replace) {
    if (replace === undefined) {
        return this.toString();
    }
    return this.split(search).join(replace);
}

replaceAll发布的这个和解决方案之间的区别是这个实现正确处理字符串中的regexp特殊字符以及允许字匹配


这是Date对象的一个​​很好的扩展,它允许您非常容易地格式化日期。 它使用PHP的日期语法,因此熟悉PHP的人会立即得到它。 其他人也有很多可能的开关列表。 我个人没有找到更简单的方法来格式化各种格式的日期。

日期格式


// This replaces all instances of 'from' to 'to' even when
// 'from' and 'to' are similar (i.e .replaceAll('a', 'a '))
String.prototype.replaceAll = function(from, to) {
    var k = this;
    var i = 0;
    var j = from.length;
    var l = to.length;

    while (i <= k.length)
        if (k.substring(i, i + j) == from) {
        k = k.substring(0, i) + k.substring(i).replace(from, to);
        i += l;
    }
    else
        i++;

    return k;
};

// left trim
String.prototype.ltrim = function () {
    return this.replace(/^\s+/, '');
}

// right trim
String.prototype.rtrim = function () {
    return this.replace(/\s+$/, '');
}

// left and right trim
String.prototype.trim = function () {
    return this.ltrim().rtrim();
}




javascript