原生 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() 方法倒是有点味道,笔者思虑半天没有明白它的机制,知道的高手请指点,万谢!