比较fromCharCode、charCodeAt、charAt、fromCodePoint、codePointAt

本文详细介绍了JavaScript中ES5和ES6版本的字符串方法,包括fromCharCode(), charCodeAt(), charAt()以及新增的fromCodePoint(), codePointAt()等。通过示例展示了如何使用这些方法进行字符编码与解码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果非要给这几种方法划清一下界限,

fromCharCode(),charCodeAt(),charAt()是ES5中的字符串方法,其中fromCharCode()用于String对象,charCodeAt(),charAt()用于字符串的实例方法;

fromCodePoint(),codePointAt()是ES6新增的特性,fromCodePoint()用于String对象,codePointAt()用于字符串的实例方法;

有了上面的概述,使用起来也更容易区分了。

1. fromCharCode() & charCodeAt()

fromCharCode()是String构造函数的一个静态方法,接收1个或多个字符编码,将它们转化为字符串。这个方法与实例方法charCodeAt()执行的是相反的操作。

String.fromCharCode(49)         //'1'
String.fromCharCode(49,50,51,52)        //'1234'
let a = '1234';
a.charCodeAt();     //49
a.charCodeAt(0);    //49    
a.charCodeAt(1);    //50
a.charCodeAt(2);    //51

2. charAt()

charAt() 返回指定位置的字符,如果指定位置不在字符串长度之内,会返回一个空字符串.

let a = '1234';
a.charAt(0);        //'1'
a.charAt(1);        //'2'
a.charAt(-1);       //'' (空字符串)

ES5中还定义了另一个访问个别字符的方法,使用方括号+数字索引:

let a = '1234';

a[0];       //'1'
a[1];       //'2'
a[-1];      //undefined

3. fromCodePoint() & codePointAt()

其实ES5中的String.fromCharCode() 方法不能单独获取在高代码点位上的字符,即不能识别 32 位的 UTF-16 字符(Unicode 编号大于0xFFFF)。

ES6中新增的方法fromCodePoint(),可以识别大于0xFFFF的字符,弥补了String.fromCharCode()方法的缺点。在执行上与codePointAt()操作相反。

String.fromCodePoint(42);       // "*"
String.fromCodePoint(65, 90);   // "AZ"
String.fromCodePoint(0x404);    // "\u0404"
String.fromCodePoint(0x2F804);  // "\uD87E\uDC04"
String.fromCodePoint(194564);   // "\uD87E\uDC04"
String.fromCodePoint(0x1D306, 0x61, 0x1D307) // "\uD834\uDF06a\uD834\uDF07"
'ABC'.codePointAt(1);          // 66
'\uD800\uDC00'.codePointAt(0); // 65536
'XYZ'.codePointAt(42); // undefined
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值