当前位置: 首页 > 图文教程 > 网络编程 > Javascript > charAt()方法和charCodeAt()方法

Javascript
用JavaScript实现浏览器地震效果
Javascript实例教程(8) 利用Javascript基于浏览器类型的重定向
Javascript实例教程(14) 鼠标触发窗口
使主页呈现“飞舞”特效
Javascript实例教程(21) OLE Automation(1)
Javascript实例教程(13) 鼠标移过时报警
Javascript实例教程(10) 随机显示图片
Javascript实例教程(2) 创建弹出式窗口
JavaScript 小技巧(第十集)
Javascript实例教程(3) 创建折叠式导航菜单
Javascript实例教程(7) 利用Javascript进行密码保护
完美解决一个事件激活多个函数(2)
Javascript模拟游戏中的弹出菜单效果
Javascript实例教程(6) 在一个表单中设置和检查Cookies
JavaScript 小技巧(第八集)
Javascript实例教程(4) 探测浏览器插件
JavaScript 小技巧(第九集)
JavaScript学习:基础继承机制
初学Javascript之cookie篇(译)
让弹出窗口变得“体贴”一些(javascript)

Javascript 中的 charAt()方法和charCodeAt()方法


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-28   浏览: 86 ::
收藏到网摘: n/a

charAt()方法和charCodeAt()方法—— 从字符串中选取一个字符

charAt()方法和charCodeAt()方法用于选取字符串中某一位置上的单个字符。对于检查用户输入的有效性,这两个方法也是非常有用的。在第6章介绍HTML表单时,你将看到这两个方法的更多具体应用。

charAt()方法具有一个参数:即所选取字符在字符串中的位置。charAt()方法的返回值就是该位置上的字符。字符串中字符的索引位置从0开始,因此,第一个字符的索引是0,第二个字符的索引是1,依此类推。

例如,要选取一个字符串中最后一个字符,可以使用如下代码:

var myString = prompt("Enter some text","Hello World!");

var theLastChar = myString.charAt(myString.length - 1);

document.write("The last character is " + theLastChar);

上面的第一行代码使用prompt() 函数显示一个提示框,请求用户输入一个字符串,如果用户未输入,则默认值为"Hello World! ",变量myString用于保存prompt()函数返回的字符串。

在上面的第二行代码中,使用charAt()方法获取字符串中的最后一个字符。我们传入charAt()方法的参数是最后一个字符的索引位置:(myString.length–1)。以字符串"Hello World! "为例,这个字符串的长度为12,则最后一个字符的索引为11。这是因为字符串的索引从0开始计算,把字符串的长度减去1就得到最后一个字符的索引。

在上面的第三行代码中,将最后一个字符输出在页面上。

charCodeAt()方法与charAt()方法类似,但它并不返回指定位置上的字符本身,而是返回该字符在Unicode字符集中的编码值。计算机只能理解数字,对于计算机来说,所有字符串都是某种编码的数字。当需要使用的是数字编码所代表的字符,而不是使用数字本身时,计算机将根据编码与字符集的内部对应关系,把每一个编码转换为字符集中相应的字符。

例如,要选取一个字符串中第一个字符的Unicode编码,可以使用如下代码:

var myString = prompt("Enter some text","Hello World!");

var theFirstCharCode = myString.charCodeAt(0);

document.write("The first character code is " + theFirstCharCode);

上面的代码将获取用户输入字符串的第一个字符的Unicode编码,并把编码输出在页面上。

字符是按顺序进行编码的,例如,字符A的编码是65,字符B的编码是66,依此类推。小写字母从97开始编码,即字母a的编码是97,字母b的编码是98,依此类推。数字字符则是从48开始编码,字符0的编码是48,而字符9的编码是57。我们可以使用字符的编码来实现一些功能,例如下面的例子。

 

在下面这个例子中,我们将使用charCodeAt()方法来检查指定字符串的第一个字符,以确定它是数字、大写字符、小写字符或其他字符:

<html>

<head>

<script language="JavaScript" type="text/javascript">

function checkCharType(charToCheck)

{

var returnValue = "O";

var charCode = charToCheck.charCodeAt(0);

if (charCode >= "A".charCodeAt(0) && charCode <= "Z".charCodeAt(0))

{

returnValue = "U";

}

else if (charCode >= "a".charCodeAt(0) && charCode <= "z".charCodeAt(0))

{

returnValue = "L";

}

else if (charCode >= "0".charCodeAt(0) && charCode <= "9".charCodeAt(0))

{

returnValue = "N";

}

return returnValue;

}

</script>

</head>

<body>

<script language="JavaScript" type="text/javascript">

var myString = prompt("Enter some text","Hello World!");

switch (checkCharType(myString))

{

case "U":

document.write("First character was upper case");

break;

case "L":

document.write("First character was lower case");

break;

case "N":

document.write("First character was a number");

break;

default:

document.write("First character was not a character or a number");

}

</script>

</body>

</html>

在文本编辑器中输入上面的代码,并保存为ch4_examp1.htm。

在浏览器中打开该页面,将会提示你输入一个字符串。在输入了字符串后,该程序将在页面上显示所输入字符串的第一个字符的类型信息—— 即该字符是大写字符、小写字符、数字、或其他的字符,如标点符号。

代码解说

在上面示例的开始,首先定义了一个将在页面代码中使用的函数checkCharType()。在该函数中,首先定义了变量returnValue并将它初始化为"O",以表示除大写字符、小写字符、数字之外的其他字符。

function checkCharType(charToCheck)

{

var returnValue = "O";

变量returnValue将作为函数的返回值返回给调用方,它包含了代表字符类型的数据。它将用U代表大写字母、L代表小写字母、N代表数字字符,而O代表其他字符。

在接下来的一行代码中,使用charCodeAt()方法获取参数charToCheck中的字符串首字符的编码。charToCheck正是该函数唯一的参数。首字符的编码将保存在变量charCode中。

var charCode = charToCheck.charCodeAt(0);

在接下来的代码中,使用了一系列的if语句,用于检查首字符的编码包含在哪一个编码期中。如果首字符的编码在字符A和字符Z的编码之间,则它是一个大写字符,就把变量returnValue的值设置为U。如果首字符的编码在字符a和字符z的编码之间,则它是一个小写字符,就把变量returnValue的值设置为L。如果首字符的编码在字符0和字符9的编码之间,则它是一个数字字符,就把变量returnValue的值设置为N。否则,如果首字符的编码不属于以上任何一个范围,则使变量returnValue保持初始值O,来表示除大写字符、小写字符、数字之外的其他字符。

if (charCode >= "A".charCodeAt(0) && charCode <= "Z".charCodeAt(0))

{

returnValue = "U";

}

else if (charCode >= "a".charCodeAt(0) && charCode <= "z".charCodeAt(0))

{

returnValue = "L";

}

else if (charCode >= "0".charCodeAt(0) && charCode <= "9".charCodeAt(0))

{

returnValue = "N";

}

上面这段代码看起来有点怪异,我们来仔细地看一看JavaScript是如何处理的。对于如下语句:

"A".charCodeAt(0)

字符串字面值"A"是一个基本数据类型的字符串,而不是一个对象。上面这行代码将字符串字面值"A"作为一个String对象来使用,并调用了String对象的charCodeAt()方法。JavaScript将理解这个操作的含义,并把字符串字面值"A"转换为一个临时的String对象,该对象中包含了字符串"A"。在此之后,JavaScript将通过这个自动创建的临时String对象来执行 charCodeAt()方法。当charCodeAt()方法执行完毕,这个临时的String对象就会被释放掉。上面这行代码可以被视为是下面代码的一种简写形式:

var myChar = new String("A");

myChar.charCodeAt(0);

无论采用何种形式,都将返回首字符的Unicode编码。即"A".charCodeAt(0)将返回字符"A"的Unicode编码65。

在函数的最后,使用return语句将变量returnValue作为返回值返回给调用方。

return returnValue;

}

也许你会奇怪,为什么我们不直接返回代表类别的字符,而要使用一个变量returnValue呢?例如,可以将上面的代码改写为如下代码:

if (charCode >= "A".charCodeAt(0) && charCode <= "Z".charCodeAt(0))

{

return "U";

}

else if (charCode >= "a".charCodeAt(0) && charCode <= "z".charCodeAt(0))

{

return "L";

}

else if (charCode >= "0".charCodeAt(0) && charCode <= "9".charCodeAt(0))

{

return "N";

}

return "O";

这段代码仍然能正常运行,但为什么我们不采用这种方式呢?这种方式的缺点就是在一个函数中使用了多个return语句,这使得函数的执行流难于跟踪。对于一个较小的函数来说,这可能并不是什么大问题,但对于一个较复杂的函数来说,就可能变成一个棘手的问题。采用第一种方式的代码,在函数结束前只有一个唯一的return语句,我们可以非常准确地知道函数将在这个return语句后结束。而对于第二个版本的函数,它具有4个return语句,因此函数可能在任何一个可达的return语句之后结束。这样,函数将具有4个可能的出口和返回位置。这使得对函数中执行流的判断更加麻烦。

在页面的代码中,我们使用了一些语句来测试函数checkCharType()的功能。首先,用变量myString来作为用于测试的字符串,这个字符串是用户在prompt()提示框中输入的,或者是prompt()函数的默认值"Hello World!"。

var myString = prompt("Enter some text","Hello World!");

接下来,把函数checkCharType()作为switch语句的比较表达式。根据checkCharType()函数的返回值,某一个case语句的条件将被匹配,case语句之后的代码将被执行,并将字符的类型信息显示给用户。

switch (checkCharType(myString))

{

case "U":

document.write("First character was upper case");

break;

case "L":

document.write("First character was lower case");

break;

case "N":

document.write("First character was a number");

break;

default:

document.write("First character was not a character or a number");

}

这个例子到这里就结束了,但是值得注意的是,这仅仅是一个例子—— 为了演示charCodeAt()函数用法的例子。在实际编程中,可以使用更简洁的方法,即可以用如下代码:

if (char >= "A" && char <= "Z")

代替例子中使用的代码:

if (charCode >= "A".charCodeAt(0) && charCode <= "Z".charCodeAt(0))