jsの文字列の長さ


Stringオブジェクトのlength属性は、文字列の長さを返すことができることはよく知られています.文字が単バイトであろうと、二バイトであろうと、長さの単位として計算されます.文字の長さを正確に取得するには、手で書く必要があります.
二つの方法を紹介します.
1、文字列を巡回して、文字の符号化によって、現在の文字が二バイトかそれとも単バイトかを判断し、文字列のバイト数を逓加する.
<span style="font-size:14px;">String.prototype.lengthSingle = function(str){
var b = 0;
for(var i=0,l=str.length;i<l;i++){
	if(this.chartCodeAt(i)>255){
		b +=2;
	}else{
		b++;
	}
}
return b;
}</span>
あるいはescapeで単バイトか二バイトかを判断します.escapeの役割は正しいです.  String  オブジェクトはすべてのコンピュータで読むことができるようにエンコードされます.
エスケープ  メソッドは、Unicode形式の文字列の値を返します.スペース、句読点、アクセント記号、および その他の非  ASCII  文字をすべて使う  %xx  コードの代わりに  xx  この文字の16進数を表します.例えば、スペースは「%20」です.  . 文字の値が大きい  255  をもって  %uxxxx  フォーマットの保存  したがって、escape法を用いて返した値の長さによって、1バイトか2バイトかを決定することができる.
<pre name="code" class="javascript"><span style="font-size:14px;">String.prototype.lengthSingle = function(str){
var b = 0;
for(var i=0,l=str.length;i<l;i++){
	var c = this.charAt(i);
	if(escape(c).length>4){
		b+=2;
	}else if(c!="\r"){
		b++;
}
}
return b;
}</span>
 
 亦可以使用正则表达式来判断为单字节还是双字节。 
  
  
 
<pre name="code" class="javascript"><span style="font-size:14px;">String.prototype.lengthSingle = function(str){
var b = 0;
for(var i=0,l=str.length;i<l;i++){
	var c = this.charAt(i);
	if(/^[\u0000-\u00ff]$/.test(c)){
		b++;
	}else{
		b+=2;
	}
}
return b;
}</span>
第二の方法は、文字列中の二重バイトの文字を**で置換して長さを統計することです.二回まで使いますので、効率は初めてではありません.だから説明しません.