JS编程建议——35:获取字节长度

建议35:获取字节长度
String对象的length属性能够返回字符串的长度,不管字符是单字节,还是双字节,都作为一个来计算。因此,要获取字符串的字节长度,必须通过手工计算获取,这里介绍两种方法。
1)第一种方法是利用循环结构枚举每个字符,并根据字符的字符编码,判断当前字符是单字节还是双字节,然后递加字符串的字节数。

  1. String.prototype.lengthB = function( ){
  2. var b = 0, l = this.length;
  3. if( l ){
  4. for( var i = 0; i < l; i ++ ){
  5. if(this.charCodeAt( i ) > 255 ){
  6. b += 2;
  7. }else{
  8. b ++ ;
  9. }
  10. }
  11. return b;
  12. }else{
  13. return 0;
  14. }
  15. }
  16. var s = "String对象长度";
  17. alert(s.lengthB()); // 14
    在检测字符是否为双字节或单字节时,方法也有多种,这里提供两种思路(代码如下):
  18. for( var i = 0; i < l; i ++ ){
  19. var c = this.charAt( i );
  20. if ( escape( c ).length > 4 ) {
  21. b += 2;
  22. }else if( c != "r" ) {
  23. b ++ ;
  24. }
  25. }
    或者使用正则表达式进行字符编码验证:
  26. for( var i = 0; i < l; i ++ ){
  27. var c = this.charAt( i );
  28. if ( /^[u0000-u00ff]$/.test(c) ) {
  29. b ++ ;
  30. }else {
  31. b += 2;
  32. }
  33. }
    2)第二种方法是利用正则表达式把字符串中双字节字符临时替换为两个字符,然后调用length属性获取临时字符串的长度。
  34. String.prototype.lengthB = function(){
  35. var s = this.replace( /1/g, "**" );
  36. return s.length;
  37. }
    这种方法比较简洁,但执行速度相对较慢,因为需要两次遍历字符串,即调用replace()方法时一次,使用length属性时一次。而第一种方法只进行一次字符串遍历。

提示:String对象的length属性是只读属性,这与Array的length属性不同。不过,与数组相同,字符串可以使用下标来定位单个字符在字符串中的位置,其中第一个字符的下标值为0,最后一个字符的下标值为length–1。字符串中的字符是不能够被for in循环枚举的。运算符delete也不能删除字符串中指定位置的字符。


  1. x00-xff
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值