javascript之字符串复习

字符串对象提供了许多方法,但是很少的程序设计人员充分利用它们,这对于一个程序员来说,不能不说这是一种缺陷。字符串提供的方法可以用于操作字符、产生HTML标签以及搜索字符串等等。

下面首先说说什么是字符串。在JavaScript语言中,字符串就是一种对象。就象在Java中,它们不是作为一系列的字符被存储的,所以字符串的操作必须使用内置的构造器和设置函数来完成。在后来的版本中有了字符串构造器和更多的关于对象的概念。在这个层次上说,字符串是由字母而不是数字组成的变量,这就是字符串的概念。

举个例子,一些有效的字符串为"Hello", "Bob", "Bob2", "33", "33.3",而33或者33.3就不是字符串了。所有的字符串有一个共同的属性,称为长度,这个长度返回了字符串中字符的个数。

最常用的字符串方法是:indexOf()、charAt()和substring()。因为这几个方法在JavaScript中经常出现,所以下面我对它们进行详细说明:

indexOf()函数

这个函数允许你判断一个字符串是否存在于一个更长的字符串中以及它所处的位置。它等价于C语言中的strstr函数以及Visual Basic语言中的inStr函数。这个方法也有一个相应的函数:lastIndexOf(),这个函数字符串的另外一端搜索。

就象函数的名字所意味的,返回数值表明字符串在所搜索字符串中的位置。如果在被搜索的字符串中没有找到要查找的字符串就返回-1。这里要注意,在JavaScript中-1是一个普通的整数,而不是一个布尔型(Boolen)的数。以下是具体例子:

var myString = "Have a nice day!";

alert(myString.indexOf("a")); //这里返回1

alert(myString.lastIndexOf("a")); // 这里返回 13

这里还需要再提醒一次,在JavaScript中的数组的索引是从0开始,这跟C语言是遗言的。所以上面的语句alert(myString.indexOf("a"))是返回1,因为”a” 处于字符串"Have a nice day!"的第二个位置。

细心一点,你可能会发现字符串"Have a nice day!"还有一个字符"a",那怎么才能找到第二个字母"a"呢?这是一个很好的问题,为了做到这一点,我们必须再介绍这个函数的第二个参数。第二个参数是一个整数,它指示了字符串中开始搜索的位置。

为了综合以上的知识,下面对代码进行一些来找到所有字符"a",具体代码如下:

var myString = "Have a nice day!";

var index = myString.indexOf("a");

while (index != -1) {

alert(index);

index = myString.indexOf("a", index + 1);
// start search after last match found

}

下面详细解释一下这段代码:变量index被初始化为第一个"a"所在的位置(如果没有"a",那么变量index就为-1)。然后再给出一个循环,条件是index!=-1。在每次的循环中,我们将变量index加1,即从找到的"a"后面第一个字符开始继续查找,直至将所有的字符"a"找到为止。当再也没有字符"a"在字符串变量mySring中找到的时候,就返回-1值,此时index就等于-1,不满足循环条件index!=-1,故导致循环结束。而alert(index)语句的输出为:1,5,13。

在这个例子中我们只是展示indexOf()进行单一字符的搜索。如果你经常使用这个函数,你会发现它可以搜索任意的字符或者字符串。

charAt()函数

这个函数返回在字符串中字符处在给定的位置。从本质上讲,它是substring()方法的一个特例,但是它也有自己的用途。如果你原来是个C语言程序员或者其它相近的语言的程序员,那么你就能理解当引用字符的时候,可以利用string.charAt(index)来代替string[index]。

从本质上讲,我们是使用charAt()来循环浏览email地址的字符串以提取出无效的字符。

如果字符是有效的,那就继续循环;如果字符是无效的,就会弹出一个警告窗口说明那个字符是无效的,此时在设置parsed=false之后使用break语句来结束for循环。

当循环存在,我们可以检查标志parsed看是否email是有效的。如果parsed为true,那么消息将被显示。

点击此处去测试页面
substring()函数

这个函数通常使用于提取字符串的任何部分。它的参数是'start' 和'end'。开始的数值是第一个字符的索引,结束数值是返回部分之后的第一个字符的索引。你可能听起来会觉得云里雾里的,但是一个最好的记忆方法是:返回字符串的长度等于end-start。

如果第二个参数省略了,那么它默认为直到字符串的结束。下面是几个例子:

var str = "This is a string";

str.substring(1, 3); //结果为hi

str.substring(3, 1); //结果为hi

str.substring(0, 4); //结果为This

str.substring(8); //结果为hi

str.substring(8, 8); //结果为空

上面的第二个例子是说明了当start>end的时候,那么这两个参数自动转换.最后的例子显示了:当start等于end的时候,返回数值为空字符串。

字符格式(HTML)

下面介绍JavaScript中最少使用的函数。虽然它们并不是十分有用,但至少它们为你的代码增加一些装饰。这些方法从字符对象中创建HTML代码用于显示在网页上。

str.anchor("anchor1")

<A NAME="anchor1">This is a string</A>

This is a string

str.big()

<BIG>This is a string</BIG>

This is a string

str.blink()

<BLINK>This is a string</BLINK >

This is a string

str.bold()

<B>This is a string</B>

This is a string

str.fixed()

<TT>This is a string</TT>

This is a string

str.fontcolor("darkred")

<FONT COLOR="darkred">This is a string</FONT>

This is a string

str.fontsize(5)

<FONT SIZE="5">This is a string</FONT>

This is a string

str.italics()

<I>This is a string</I>

This is a string

str.link("index.html")

<A HREF="index.html">This is a string</A>

This is a string

str.small()

<SMALL>This is a string</SMALL>

This is a string

str.strike()

<STRIKE>This is a string</STRIKE>

This is a string

str.sub()

<SUB>This is a string</SUB>

This is a string

str.sup()

<SUP>This is a string</SUP>

This is a string

str.toLowerCase()

this is a string

this is a string

str.toUpperCase()

THIS IS A STRING

THIS IS A STRING

上表中最后的两个例子不是与HTML特定相关的,但是它们作为一种格式工具是很有用的。

就象我们前面所解释的,写东西到一个已经装载的文档或者窗口是不可能的。为了显示这个代码我们打开新窗口并为这个窗口写入产生的HTML代码。

当然,你可以只使用JavaScript来格式化文本,但是一旦被格式化后的文本出现在网页上,它就不可变了。

当你从一个网页向另一个网页传递数值的时候,你可以使用URL搜索字符串(比如使用一个表单,利用method="get"),这时你会发现有些字符被转换为 %nn格式:

http://www.mydomain.com.au/index.html?name=Duncan%20Crombie

而网络服务器和网络浏览器只能处理有限的字符,所以任何的字符一旦超过这个范围都将以数字的形式进行传递。

这个escape函数可以对变量进行编码,当设置cookies的时候它经常使用;而unescape函数是用来对它们进行译码。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351

推荐阅读更多精彩内容