例如,要選取一個字元串中最後一個字元,可以使用如下代碼:
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))
javascript的一個方法
charCodeAt 方法
返回一個整數,代表指定位置上字元的 Unicode 編碼。
strObj.charCodeAt(index)
參數strObj
必選項。任何 String 對象或文字。
index
必選項。將被處理的字元的從零開始計數的編號。
有效值為 0 到字元串長度減 1 的數字。
說明一個字元串中的第一個字元編號為 0,第二個字元編號為 1,依此類推。
如果指定位置沒有字元,將返回 NaN。
示例以下示例闡明了 charCodeAt 方法的用法。
function charCodeAtTest(n)
{ var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //初始化變數。
var n; //聲明變數。
n = str.charCodeAt(n - 1); //獲取位置 n 上字元的 Unicode 值。
return(n); //返回該值。
}
就像這個例子一樣,返回的是下標從0開始n的位置的Unicode編碼.