原生 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 的源码注释和示例翻译一下:
- <SPAN style="FONT-SIZE: medium">
-
-
-
-
-
-
-
- Ext.applyIf(String, {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
escape : function(string) {
-
-
return string.replace(/('|\\)/g, "\\$1");
-
- },
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
leftPad : function (val, size, ch) {
-
-
var result = new String(val);
-
-
if(!ch) {
-
-
ch = " ";
-
- }
-
-
while (result.length < size) {
-
- result = ch + result;
-
- }
-
-
return result.toString();
-
- },
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
format : function(format){
-
-
var args = Array.prototype.slice.call(arguments, 1);
-
-
return format.replace(/\{(\d+)\}/g, function(m, i){
-
-
return args[i];
-
- });
-
- }
-
- });
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
String.prototype.toggle = function(value, other){
-
-
return this == value ? other : value;
-
- };
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
String.prototype.trim = function(){
-
-
var re = /^\s+|\s+$/g;
-
-
return function(){ return this.replace(re, ""); };
-
- }();</SPAN>
/**
* @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() 方法倒是有点味道,笔者思虑半天没有明白它的机制,知道的高手请指点,万谢!
分享到:
相关推荐
Java String类为什么是不可变的_动力节点Java学院整理,动力节点口口相传的Java黄埔军校
7. **主题定制**:EXTJS 4.2.0可能扩展了主题支持,让开发者能够更轻松地创建自定义皮肤,满足特定品牌和设计需求。 8. **调试与测试工具**:为了帮助开发者更好地调试和测试EXTJS应用,4.2.0版本可能增强了开发...
2. 扩展访问控制列表(Extended ACL):编号为100-199,对源地址、目的地址、源端口、目的端口和协议进行判断,通常放在离源端较近的接口上。 扩展ACL的特点: * 可以对源地址和目的地址进行判断 * 可以对源端口和...
这个故事讲述了民间打拐勇士仔仔的事迹,他是一个退伍的武警战士,致力于打击人口贩卖,尤其是儿童拐卖。仔仔通过网络监控,识别出人贩子的暗语,并与他们周旋,协助警方解救被拐儿童。 1. **网络监控与反拐策略**...
【仔仔学数学源码 C#4】是一个专门为幼儿园及小学生设计的数学运算软件,旨在帮助孩子们学习和掌握万位数以内的基本算术运算。这个项目采用C#编程语言的第四版本(C#4)编写,展示了如何利用C#的强大功能来创建教育...
String类的split()方法使用正则表达式来分割字符串。为了匹配空白字符,可以使用"\s+",但由于Java的字面量转义,实际传入的参数应该是"\\s+"。 6. **substring()方法的工作原理** 在JDK 6中,substring()方法...
2. **结构分析**:分析项目的目录结构和文件组织,了解模块划分和职责分配,这对理解整个系统架构至关重要。 3. **数据库交互**:查看与数据库相关的代码,了解数据的存储和查询方式,可能涉及SQL语句、ORM框架(如...
5. **兼容性与移植性**:GBA图书仔2 0.9版需要确保生成的电子书能在各种GBA硬件上正常运行,这涉及对不同GBA模拟器和真实硬件的兼容性测试。 6. **性能优化**:为了在低性能的GBA设备上流畅运行,软件需要进行性能...
这三个主要成分都是通过线性回归分析进一步研究的,结果表明城市用地的扩展与城市人口和GDP的增长之间存在高度正相关的关系,而进一步的偏相关分析发现,GDP增长是解释城市用地扩展的更重要因素。这意味着经济增长在...
这里有两份灵格斯词典,它们可以扩展jieba的基础词库,提高对年报中非标准词汇或行业特有词汇的识别率,确保分析的全面性。 会计科目词典包含了会计领域中常见的科目名称,如“应收账款”、“固定资产”等。在分析...
3. **文件系统**:选择合适的文件系统对嵌入式设备至关重要,例如JFFS2、YAFFS或ext4,这些文件系统有不同的优点和适用场景。 4. **实时性增强**:对于需要实时响应的嵌入式应用,可以通过RT-PREEMPT补丁或采用实时...
这些库提供了对EF的扩展,使得我们能够批量插入数据,显著提高性能。 1. **安装扩展库**: 要使用BulkInsert,首先需要通过NuGet包管理器安装对应的扩展库,例如`EntityFramework.BulkInsert`。在Visual Studio中...
- 符合“开闭原则”,即对扩展开放,对修改关闭。通过引入新的适配器可以轻松地扩展系统功能。 - 增加了类的透明性和复用性,提高了程序的可维护性。 ##### 缺点: - 多重适配会导致系统变得复杂。 - 使用适配器会...
宝仔视觉空间宝仔视觉空间宝仔视觉空间宝仔视觉空间
《农林牧渔类畜牧业行业长白猪领域分析报告》是一份深度研究畜牧业中长白猪养殖业的专业报告,旨在全面解析该领域的现状、发展趋势以及关键数据。报告内容包括但不限于行业概览、市场分析、生产情况、经济效益以及...
包括各个文本的关键词输出,可以控制关键词输出个数,也可以对关键词加入黑名单和白名单。 关于TextClassify文本分类系统的改进: 改进jieba中文分词词典 改进黑名单:增加停用词 改进白名单:增加专业词 在Text...
ANSYS作为一款强大的多物理场仿真软件,提供了丰富的功能来模拟地震对结构的影响,帮助工程师进行地震分析。本文将围绕“ANSYS地震分析.rar”这一综合学习科研包,探讨其包含的反应谱分析、时程分析、人工波生成以及...
在死仔截图中,`Bitmap`类用于创建一个与屏幕分辨率相同的图像,然后将屏幕内容复制到这个位图对象中。 5. **Rectangle结构**:`Rectangle`结构用于定义一个矩形区域,它是截图的关键部分。在选择截图区域时,需要...