function succ() {
return this.slice(0, this.length - 1) + String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
}
这里主要的就是fromCharCode和charCodeAt方法的使用。从代码中也可以看出,两者的明显区别是fromCharCode是String的静态方法,而charCodeAt是字符串的方法(挂在String.prototype上面)。然后两者的作用正好相反,下面是给出的解释:
fromCharCode() 可接受一个指定的 Unicode 值,然后返回一个字符串。
charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。
具体到succ,以字符串‘hello xesam'为例,先获取除结尾字符外的所有字符‘hello xesa',然后加上Unicode表中‘m'后面的一个字符‘n',因此结果就是‘hello xesan'
以此为基础,我们要打印从‘a'到‘z'的所有字母,可以用以下的函数:
复制代码 代码如下:
function printChar(start,end){
var s = (start + '').charCodeAt()
var e = (end + '').charCodeAt();
if(s > e){
s = [e,e=s][0];
}
for(var i = s ;i <= e; i++){
console.log(String.fromCharCode(i));
}
}
printChar('a','z');
复制代码 代码如下:
function times(count) {
return count < 1 ? '' : new Array(count + 1).join(this);
}
times作用是重复整个字符串,其主要思想就是将当前字符作为数组的连接符调用join来获得预期结果。当然用循环添加也可以,不过没这么简洁。
如果要重复字符串里面的每个字符,可以用相同的思想:
复制代码 代码如下:
String.prototype.letterTimes = function(count){
var arr = [];
arr.length = count + 1;
return this.replace(/\w/g,function(a){
return arr.join(a);
})
}
console.log('xesam'.letterTimes(3));//xxxeeesssaaammm
camelize | capitalize | underscore | dasherize这四个主要是关于变量名转换的。
camelize : 将一个用横线分隔的字符串转换为 Camel 形式
capitalize :将一个字符串的首字母转换为大写,其它的字母全部转为小写。
underscore :将一个 Camel 形式的字符串转换为以下划线("_")分隔的一系列单词。
dasherize :将字符串中的下划线全部替换为横线("_" 替换为 "-")。
最明显的,可以用在CSS属性与DOM的style属性的相互转换中【class与float不属于此范畴】。对应到上面的方法中,将CSS属性转换为对应的DOM的style属性可以使用camelize 方法,但是反过来却没有这个方法,因此必须连续调用underscore -> dasherize 方法才行。
复制代码 代码如下:
function camelize() {
return this.replace(/-+(.)?/g, function(match, chr) {
return chr ? chr.toUpperCase() : '';
});
}
核心是replace方法的使用,其他挺简单,参见《浅析字符串的replace方法应用》
复制代码 代码如下:
function capitalize() {
return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
}
这里注意charAt(charAt() 方法可返回指定位置的字符。)与charCodeAt的区别就可以了。
复制代码 代码如下:
function underscore() {
return this.replace(/::/g, 'https://www.jb51.net/')
.replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')
.replace(/([a-z\d])([A-Z])/g, '$1_$2')
.replace(/-/g, '_')
.toLowerCase();
}
实例来说明步骤:
复制代码 代码如下:
'helloWorld::ABCDefg'.underscore()
//'helloWorld::ABCDefg'
.replace(/::/g, 'https://www.jb51.net/') //'helloWorld/ABCDefg'
.replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')//helloWorld/ABC_Defg
.replace(/([a-z\d])([A-Z])/g, '$1_$2') //hello_World/ABC_Defg
.replace(/-/g, '_') //hello_World/ABC_Defg
.toLowerCase(); //hello_world/abc_defg
这个方法只适合Camel 形式的,就是得有‘峰'。
复制代码 代码如下:
function dasherize() {
return this.replace(/_/g, '-');
}
这个就是单纯的字符替换而已。
来自小西山子
您可能感兴趣的文章: