比较fromCharCode、charCodeAt、charAt、fromCodePoint、codePointAt

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

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
fromcharcode指的是JavaScript中的一个方法,它可以根据Unicode编码返回对应的字符。那么为什么会出现fromcharcode乱码的情况呢? 首先,需要了解Unicode编码。Unicode是一种字符编码标准,它为世界上几乎所有的字符指定了一个唯一的数值。在JavaScript中,fromcharcode方法可以通过Unicode编码来返回对应的字符。 然而,可能出现乱码的原因有以下几种情况: 1. 错误的输入参数: 如果传递给fromcharcode方法的参数不是有效的Unicode编码,那么就有可能返回乱码。例如,当一个无效的数字被传递给fromcharcode时,会返回一个特殊的替代字符,而不是期望的字符。 2. 不支持的字符: 某些字符可能不在JavaScript支持的Unicode范围内,因此无法正确地通过fromcharcode方法返回。这时候,可能会出现乱码的情况。 3. 字符集问题: 当页面的字符集和所使用的字符编码不一致时,可能会导致fromcharcode方法返回的字符与预期不符,出现乱码的情况。 为了避免fromcharcode乱码的问题,我们应该注意以下几点: 1. 确认传递给fromcharcode方法的参数是有效的Unicode编码。 2. 使用支持的字符集和字符编码。可以通过在页面的头部指定正确的字符集(meta标签)来避免乱码问题。 3. 如果遇到复杂的字符编码问题,可以考虑使用第三方库或工具来处理。例如,可以借助iconv等工具进行字符编码的转换。 总之,fromcharcode乱码问题的解决需要我们仔细检查输入参数、字符集和字符编码的设置,以确保正确地获取对应的字符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值