ASCII码(美国信息交换标准代码)是基于拉丁字母的一套编码系统,它使用7位二进制数来表示128个字符,包括控制字符(如换行符、回车符)、可打印字符(数字、大小写字母、标点符号等)以及特殊符号,在JavaScript中,ASCII码是字符处理的基础,开发者经常需要通过字符与ASCII码的转换来实现字符串操作、数据验证、加密解密等功能,下面将详细介绍ASCII码的概念、JavaScript中的相关方法及实际应用。

ASCII码基础
ASCII码最初由美国国家标准学会(ANSI)在1963年发布,目的是在不同计算机设备间实现统一的字符编码,标准ASCII码使用7位二进制,即从0000000(0)到1111111(127),共128个字符。
- 0-31及127为控制字符,如
NUL(空字符,0)、LF(换行符,10)、CR(回车符,13)等,这些字符用于控制设备(如打印机、终端)的行为,不显示为可见字符。 - 32-126为可打印字符,包括空格(32)、数字(48-57)、大写字母(65-90)、小写字母(97-122)以及标点符号(如33!、44,、46.等),这些是日常文本中常见的字符。
需要注意的是,ASCII码仅包含英文字符、数字和少量符号,无法表示中文、日文等非拉丁字符,后续扩展的ASCII码(如ISO-8859-1)使用8位二进制,扩展到256个字符,增加了带重音的字母和特殊符号,但仍无法覆盖全球所有语言,Unicode编码(如UTF-8)应运而生,通过1-4个字节表示所有字符,而ASCII码是Unicode的子集(Unicode的前128个字符与ASCII码完全一致)。
以下是部分常见ASCII码与字符的对应关系:
| ASCII码 | 字符 | ASCII码 | 字符 | ASCII码 | 字符 |
|---|---|---|---|---|---|
| 48 | 0 | 65 | A | 97 | a |
| 49 | 1 | 66 | B | 98 | b |
| 50 | 2 | 67 | C | 99 | c |
| 57 | 9 | 90 | Z | 122 | z |
| 32 | 空格 | 33 | 46 |
JavaScript中的ASCII码处理方法
JavaScript字符串中的每个字符都对应一个UTF-16编码单元(对于ASCII字符,UTF-16编码与ASCII码相同),因此可以通过内置方法实现字符与ASCII码的相互转换。
字符转ASCII码:charCodeAt()
String.prototype.charCodeAt(index)方法返回指定索引处字符的UTF-16编码值(对于ASCII字符,即ASCII码)。index是字符串中字符的位置(从0开始),如果省略index或超出字符串长度,则返回NaN。
示例:
const char = 'A'; console.log(char.charCodeAt(0)); // 输出: 65 const numChar = '5'; console.log(numChar.charCodeAt(0)); // 输出: 53 const space = ' '; console.log(space.charCodeAt(0)); // 输出: 32
ASCII码转字符:fromCharCode()
String.fromCharCode(code1, code2, ...)是String的静态方法,接受一个或多个UTF-16编码值(ASCII码),返回对应的字符组成的字符串,对于ASCII字符(0-127),编码值直接对应ASCII码。
示例:

console.log(String.fromCharCode(65)); // 输出: 'A' console.log(String.fromCharCode(97, 98, 99)); // 输出: 'abc' console.log(String.fromCharCode(32, 33, 34)); // 输出: ' !"'
遍历字符串的ASCII码
通过结合charCodeAt()和字符串遍历,可以处理字符串中每个字符的ASCII码,判断字符串是否全为数字:
function isAllDigits(str) {
for (let i = 0; i < str.length; i++) {
const code = str.charCodeAt(i);
if (code < 48 || code > 57) { // 数字ASCII码范围: 48-57
return false;
}
}
return true;
}
console.log(isAllDigits('12345')); // 输出: true
console.log(isAllDigits('12a45')); // 输出: false ASCII码在JavaScript中的常见应用
大小写转换
大小写字母的ASCII码差值固定:大写字母(65-90)和小写字母(97-122)相差32,可以通过加减32实现大小写转换。
示例:
function toLowerCase(char) {
if (char.length !== 1) return '请输入单个字符';
const code = char.charCodeAt(0);
if (code >= 65 && code <= 90) {
return String.fromCharCode(code + 32);
}
return char;
}
function toUpperCase(char) {
if (char.length !== 1) return '请输入单个字符';
const code = char.charCodeAt(0);
if (code >= 97 && code <= 122) {
return String.fromCharCode(code - 32);
}
return char;
}
console.log(toLowerCase('A')); // 输出: 'a'
console.log(toUpperCase('z')); // 输出: 'Z' 字符类型判断
通过ASCII码范围可以快速判断字符的类型(数字、字母、空格等)。
示例:
function getCharType(char) {
const code = char.charCodeAt(0);
if (code >= 48 && code <= 57) return '数字';
if (code >= 65 && code <= 90) return '大写字母';
if (code >= 97 && code <= 122) return '小写字母';
if (code === 32) return '空格';
return '其他字符';
}
console.log(getCharType('5')); // 输出: '数字'
console.log(getCharType('Z')); // 输出: '大写字母'
console.log(getCharType(' ')); // 输出: '空格' 简单加密与解密
利用ASCII码的数值特性,可以实现简单的加密算法(如凯撒密码:每个字符的ASCII码加/减一个固定偏移量)。
示例:
// 加密:每个字符ASCII码加3
function encrypt(str, offset = 3) {
let result = '';
for (let i = 0; i < str.length; i++) {
let code = str.charCodeAt(i) + offset;
// 处理ASCII码范围(0-127),超过127则循环
if (code > 127) code -= 128;
result += String.fromCharCode(code);
}
return result;
}
// 解密:每个字符ASCII码减3
function decrypt(str, offset = 3) {
let result = '';
for (let i = 0; i < str.length; i++) {
let code = str.charCodeAt(i) - offset;
// 处理ASCII码范围,小于0则循环
if (code < 0) code += 128;
result += String.fromCharCode(code);
}
return result;
}
const original = 'Hello';
const encrypted = encrypt(original);
const decrypted = decrypt(encrypted);
console.log('原始字符串:', original); // 输出: Hello
console.log('加密后:', encrypted); // 输出: Khoor
console.log('解密后:', decrypted); // 输出: Hello 输入验证
在表单处理中,常需要验证用户输入是否符合要求(如仅允许字母数字),可通过ASCII码范围判断。

示例:
function isValidUsername(username) {
for (let i = 0; i < username.length; i++) {
const code = username.charCodeAt(i);
// 允许字母(大写65-90,小写97-122)和数字(48-57)
if (!((code >= 65 && code <= 90) ||
(code >= 97 && code <= 122) ||
(code >= 48 && code <= 57))) {
return false;
}
}
return true;
}
console.log(isValidUsername('user123')); // 输出: true
console.log(isValidUsername('user@123')); // 输出: false(包含@,ASCII码64) 注意事项
ASCII码与UTF-16编码的区别:JavaScript使用UTF-16编码字符串,
charCodeAt()返回的是UTF-16码元值,对于ASCII字符(0-127),UTF-16码元值与ASCII码一致;但对于非ASCII字符(如中文“字”,UTF-16码元值为23383),直接使用charCodeAt()得到的值不是ASCII码,此时需结合codePointAt()处理Unicode码点(如“字”的Unicode码点为23383)。示例:
const chineseChar = '字'; console.log(chineseChar.charCodeAt(0)); // 输出: 23383(UTF-16码元值) console.log(chineseChar.codePointAt(0)); // 输出: 23383(Unicode码点)
ASCII码范围限制:ASCII码仅支持0-127,若处理非ASCII字符(如带重音的字母“é”,ASCII码无对应字符),需使用Unicode编码。
相关问答FAQs
A:charCodeAt()是String的实例方法,用于获取字符串中指定位置字符的UTF-16编码值(ASCII字符返回ASCII码);fromCharCode()是String的静态方法,用于根据UTF-16编码值(ASCII码)生成对应字符,两者的联系在于互为逆操作:String.fromCharCode(str.charCodeAt(0))的结果等于原字符(对ASCII字符而言)。'A'.charCodeAt(0)返回65,String.fromCharCode(65)返回'A'。
Q2:如何用JavaScript判断一个字符是否为ASCII字符?
A:通过获取字符的UTF-16编码值,判断其是否在ASCII码范围内(0-127),具体方法:str.charCodeAt(0) >= 0 && str.charCodeAt(0) <= 127,若返回true,则字符是ASCII字符;否则不是。'A'.charCodeAt(0)为65,是ASCII字符;’字’.charCodeAt(0)`为23383,不是ASCII字符。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复