JavaScript中String的属性和方法

String只有一个属性,就是length,length表示的是字符的数目,而不是编码长度,无论页面是gb2312编码还是utf-8编码,汉字都被认为是一个长度。

<script>

var a = "我爱我家";

var b = "I love home";

document.write(a.length);

document.write(b.length);

//显示:4 11(加两个空格)

</script>

String的方法比较多,从简单到复杂,一个一个讲解:

toLowerCase()方法可以把字符串转换成小写,toUpperCase()方法正好相仿,把字符串转换 成大写,使用方法也非常简单。 toLocaleUpperCase()和toLocaleLowerCase()方法是为了支持少数有Unicode字符冲突的语言(比如土耳其语), 没有特殊情况,完全可以放弃使用:

<script>

var c = "AAA";

var d = "aaa";

document.write(c.toLowerCase());

document.write(d.toUpperCase());

document.write(c.toLocaleLowerCase());

document.write(d.toLocaleUpperCase());

//显示:aaa AAA aaa AAA

</script>

localeCompare()方法可以用作比较字符串,使用方法如下:

<script>

var e = "我";

var f = e.localeCompare("我");

var g = e.localeCompare("你");

document.write(f);

document.write(g);

//显示:0 1

</script>

toString()方法将对象转换成字符串,valueOf()方法获取字符串的值,在一些JavaScript的参考书对两者的解释是相同的,但是仔细研究下面的例子,还是有微小的差别的,很白痴的两个方法,不多讲:

<script>

var h = 1;

document.write(typeof(h));

document.write(typeof(h.toString()));

document.write(typeof(h.valueOf()));

//显示:number string number

var i = "1";

document.write(typeof(i));

document.write(typeof(i.toString()));

document.write(typeof(i.valueOf()));

//显示:string string string

</script>

concat()方法可以拼合任意多个字符串,concat()方法不怎么被提及的原因是因为有运算符“+”,既生瑜何生亮!好在堂姐Array那边还有一个concat方法Array.concat(),不多说:

<script>

var j = "我";

var k = "爱";

var l= "家";

document.write(j.concat(k,j,l));

document.write(j + k + j + l);

//显示:我爱我家 我爱我家

</script>

charAt()方法捕获指定位置的字符,charCodeAt()方法捕获指定位置的字符的Unicode编码,这两个方法都有一个参数n,表示从第几 个字符开始返回数据。fromCharCode()方法和charCodeAt()的作用刚好相反,可以把Unicode编码的字符转换成字符:

<script>

var m = "我爱我家";

document.write(m.charAt(0));

document.write(m.charCodeAt(0));

document.write(String.fromCharCode(25105, 29233, 25105, 23478));

//显示:我 25105 我爱我家

</script>

split()方法的作用是把字符串用特定的分隔符分隔成数组,split()方法有两个参数,第一个参数是分隔符(可以是正则),第二个参数表示需要返回的数组数,缺省时全部返回:

<script>

document.write("1:2:3:4:5".split(":"));

//返回["1","2","3","4","5"]

document.write("|a|b|c|".split("|"));

//返回["", "a", "b", "c", ""]

document.write("hello".split(""));

//返回["h","e","l","l","o"]

document.write("hello".split("", 3));

//返回["h","e","l"]

document.write("hello <b>world</b>".split(/(<[^>]*>)/));

//返回["hello ","<b>","world","</b>",""],IE显示不出来是IE的问题

</script>

indexOf()方法可以获取某个字符或字符串在String中出现的位置,lastIndexOf()的作用和indexOf()类似,只不过是从后 开始向前检索,indexOf()方法和lastIndexOf()方法都有两个参数,第一个参数表示需要查找的字符,第二个参数表示开始查找的位置,在 lastIndexOf()方法中,第二个参数也是从前往后计算的,第二个参数不支持负数的形式。

<script>

var n="我爱我家的作者是梁左";

document.write(n.indexOf("我"));//第一个字符是0

document.write(n.indexOf("我",1));

document.write(n.lastIndexOf("我"));

document.write(n.indexOf("作者"));

document.write(n.lastIndexOf("作者"));

document.write(n.indexOf("宋丹丹"));

//显示:0 2 2 5 5 -1

</script>

slice()方法,substr()方法和substring()方法的作用都是截取字符串,功能和用法相似,但也各有用处。这三种方法都有2个参数, 表示需要截取字符串的位置情况,slice()方法和substring()方法的两个参数表示字符串的绝对位置,substr()方法的第1个参数表示 绝对位置,后一个参数表示的是相对于第一个参数的位置:

<script>

var o="我爱我家的作者是梁左"

document.write(o.slice(2,3))//第一个字符是0

document.write(o.substring(2,3))

document.write(o.substr(2,3))

//显示:我 我 我家的

</script>

slice()方法的两个参数如果有负数,就表示是从后往前计算,substring()方法的两个参数可以颠倒,如果有负数的话计算机会被认为是 0,substr()方法在FireFox下面,如果第一个参数小于0,FireFox会从后往前的计数,IE则会把第一个参数当成0,第二个参数如果小 于0,计算机会认为是0。

<script>

var p="我爱我家的作者是梁左"

document.write(p.slice(-5,-3))//第一个字符是0

document.write(p.substring(-5,2))

document.write(p.substr(-7,3))

//显示:作者 我爱 家的作

</script>

search()方法使用正则表达式查询并返回第一次匹配的位置,search()方法只有1个参数:

<script>

var q="我爱我家的作者是梁左"

document.write(q.search("家"))//可以是正则

//显示:3

</script>

match()方法在匹配以后能够返回匹配的内容,如果和正则表达式很好的结合使用,能够拥有非常强大的功能。在match()方法不使用正则表达式的时候,返回匹配项的同时还返回匹配项出现位置(index)和整个字符串(input):

<script>

var r="我爱我家的作者是梁左"

document.write(r.match("家"))

document.write(r.match("家").index)

document.write(r.match("家").input)

//显示:家 3 我爱我家的作者是梁左

</script>

在使用正则表达式的时候有两种情况,一种是不带有全局匹配符“g”,另一种是带“g”,不带“g”的时候,返回的结果是一个数组,数组的第一项是匹配的结 果,如果正则中有()分隔,会依次将()所匹配的内容排列在数组里面,同时还返回匹配的位置(index)和整个字符串(input);带“g”的情况下 只返回匹配项的内容,然后依次组成数组,不返回位置和字符串,对于理解正则表达式的使用方法有困难的朋友请先阅读《JavaScript中的正则表达 式》:

<script>

var s = "http://www.w3c.org/index.php";

var t = /"w+/g;

u = s.match(t);

document.writeln(u[0]);

document.writeln(u[1]);

document.writeln(u[2]);

document.writeln(u.input);

document.writeln(u.index);

//带“g”的情况显示:http www w3c undefined undefined

var v = "http://www.w3c.org/index.php";

var w = /("w+):"/"/(["w".]+)"/(["w".]+)/;

x = v.match(w);

document.writeln(x[0]);

document.writeln(x[1]);

document.writeln(x[2]);

document.writeln(x[3]);

document.writeln(x.input);

document.writeln(x.index);

//不带“g”的情况显示:http://www.w3c.org/index.php http www.w3c.org index.php http://www.w3c.org/index.php 0

</script>

replace()方法可以对字符串中的内容进行匹配和替换,对于正则内部带有()的部分,可以使用逆向引用(backreferencing)的方法,使用“$1,$2,$3”的变量形式引用匹配的内容:

<script>

var y = "我喜欢我家";

z = y.replace("喜欢","爱");

document.writeln(z);

document.writeln(z.input);

document.writeln(z.index);

//显示:我爱我家 undefined undefined

var a = /("d{3})("d{2})("d{4})/;

var b = "123456789";

c = b.replace(a, "$1-$2-$3");

document.writeln(c);

//显示:123-45-6789

</script>

JavaScript中还有一个大类的String方法,称为HTML方法,只要懂得基本的HTML语法,就能看懂这些方法的使用规则:

anchor("name"):给链接加锚点

big():字体加大

blink():闪烁文字//IE不支持此方法

bold():粗体字

fixed():打字字体(字母宽度相同)

fontcolor("color"):字体颜色

Fontsize(size):字体大小

italics():斜体字

Link("location"):给文字加上链接

small():字体缩小

strike():画线删除字体

Sub():下标字

Sup():上标字

使用方法可以自己调试,语法列出如下:

<script>

document.write("text".anchor("name"));

document.write("text".big());

document.write("text".blink());

document.write("text".bold());

document.write("text".fixed());

document.write("text".fontcolor("red"));

document.write("text".fontsize(7));

document.write("text".italics());

document.write("text".link("#name"));

document.write("text".small());

document.write("text".strike());

document.write("text".sub());

document.write("text".sup());

</script>