原生 String 类:
一个 length 属性、一个静态方法 String.fromCharCode() 、 17 个实例方法。(这里的称呼都是方便理解的方式,不是严格意义上 OO 的意思。)
17 个实例方法简表:
1、 charAt()
2、 charCodeAt() :返回字符串中指定位置处的字符编码( Unicode 码值)。
3、 concat() :把一个或多个值连接到字符串上
4、 indexOf()
5、 lastIndexOf()
6、 localeCompare() :用本地化的顺序比较字符串
7、 match(): 用正则表达式进行模式匹配
8、 replace()
9、 search() :检索字符串中与正则表达式匹配的子串
10、 slice(): 返回字符串的一个子串
11、 split()
12、 substr()
13、 substring()
14、 toLowerCase()
15、 toString()
16、 toUpperCase()
17、 valueOf()
Ext 对 String 的扩展
在 Ext.js 中对 String 类扩展了三个静态方法: escape() 、 leftPad() 、 format() ;
两个实例方法: toggle() 、 trim() 。
对 String 类的扩展程序比较简洁,不对废话,仅仅把 Ext 的源码注释和示例翻译一下:
/**
* @String类
* 这些方法是对JavaScript中String类静态方法的扩展
*/
Ext.applyIf(String, {
/**
*将传进来的String中的’和\过滤掉
* @参数 {String} string 需要进行过滤的字符串
* @返回值 {String} 过滤好的字符串
* @静态方法
*/
escape : function(string) {
return string.replace(/('|\\)/g, "\\$1");
},
/**
* 用指定的字符填充一个字符串的左侧。对于格式化数字或者日期字符串,这
*一个非常有用的方法。用法示例:
* <pre><code>
var s = String.leftPad('123', 5, '0');
// s now contains the string: '00123'
</code></pre>
* @参数1 {String} string 原来的字符串
* @参数2 {Number} size 返回字符串的总长度
* @参数3 {String} char (optional) 填充的字符串 (默认用" "填充)
* @返回值 {String} 填充好的字符串
* @静态方法
*/
leftPad : function (val, size, ch) {
var result = new String(val);
if(!ch) {
ch = " ";
}
while (result.length < size) {
result = ch + result;
}
return result.toString();
},
/*允许你自定义含有占位符的字符串,并且传递任意数量的参数去替代这些占位符。*每一个占位符必须是唯一的,并且以{0}、{1}…这种格式递增。
*用法示例:
* <pre><code>
var cls = 'my-class', text = 'Some text';
var s = String.format('<div class="{0}">{1}</div>', cls, text);
// s now contains the string: '<div class="my-class">Some text</div>'
</code></pre>
* @参数1 {String} string 含有占位符,需要格式化的字符串
* @参数2 {String} value1 替代占位符 {0}的字符串
* @参数3 {String} value2 替代占位符{1}的字符串,以此类推
* @返回值 {String} 格式化好的字符串
* @静态方法
*/
format : function(format){
var args = Array.prototype.slice.call(arguments, 1);
return format.replace(/\{(\d+)\}/g, function(m, i){
return args[i];
});
}
});
/*工具方法,帮助你轻松地在两个字符串之间轮换取值。
*传入的第一个参数值会与当前字符串进行比较,如果它们相等,则把当前字符串赋值*为传入的第二个参数。否则,保持当前值不变。
*注意,该方法会返回一个新的字符串,而不是去改变当前字符串。
* <pre><code>
// alternate sort directions
sort = sort.toggle('ASC', 'DESC');
// instead of conditional logic:
sort = (sort == 'ASC' ? 'DESC' : 'ASC');
</code></pre>
* @参数1 {String} value 需要与当前值进行比较的字符串
* @参数2 {String} other 如当前字符串与第一个传入的参数相等,赋值给当前字符串的新值。
* @返回值 {String} 新的字符串
*/
String.prototype.toggle = function(value, other){
return this == value ? other : value;
};
/**
* 去掉字符串两端的空格,保持中间的空格不变。示例:
* <pre><code>
var s = ' foo bar ';
alert('-' + s + '-'); //alerts "- foo bar -"
alert('-' + s.trim() + '-'); //alerts "-foo bar-"
</code></pre>
* @返回值 {String} 去掉两端空格后的字符串
*/
String.prototype.trim = function(){
var re = /^\s+|\s+$/g;
return function(){ return this.replace(re, ""); };
}();
format() 方法的工作机制:
对 String 的扩展代码比较清晰,也很好理解,里面这个 format() 方法倒是有点味道,笔者思虑半天没有明白它的机制,知道的高手请指点,万谢!
2 楼 damoqiongqiu 2010-11-30 20:49
呃,,,到今天才看到你的评论,不过我不知道文章被转到了这个地方,还是谢谢你
1 楼 bigbone 2009-09-21 16:03