编写一个方法 求一个字符串的字节长度

时间:2023-01-09 23:20:05
编写一个方法 求一个字符串的字节长度
<script language="javascript" type="text/javascript">
new function(s)
{
if(!arguments.length||!s) return null;
if(""==s) return 0;
var l=0;
for(var i=0;i<s.length;i++)
{
   if(s.charCodeAt(i)>255) l+=2;
   else l++;
}
alert(l);
}("你");
</script>
这段代码有几个地方不是很懂,一个是arguments 是什么意思。还有!s代表什么?

还有charCodeAt()的意思是不是什么意思。请教大家。

12 个解决方案

#1


arguments 表示传入的参数集,!s表示s有值不为空

#2


arguments 参数的集合
arguments[0]代表第一个参数
arguments.length代表参数的个数
!s  s是参数  if(!s)是说参数不存在,执行return null;
charCodeAt()  返回的是Unicode 编码
如:
<script type="text/javascript">
var str="a"
alert(str.charCodeAt(0))
</script>
返回97
if(s.charCodeAt(i)>255) l+=2; 
估计Unicode 编码中大于255的算2个字节吧  汉字之类的

#3


js用的是unicode
汉字跟英文字母按理说应该是一样长的

#4


学习

#5


引用 2 楼 liaoliaoss 的回复:
arguments 参数的集合 
arguments[0]代表第一个参数 
arguments.length代表参数的个数 
!s  s是参数  if(!s)是说参数不存在,执行return null; 
charCodeAt()  返回的是Unicode 编码 
如: 
<script type="text/javascript"> 
var str="a" 
alert(str.charCodeAt(0)) 
</script> 
返回97 
if(s.charCodeAt(i)>255) l+=2; 
估计Unicode 编码中大于255的算2个字节吧  汉字之类的

详细 正解if(s.charCodeAt(i)>255) l+=2; 检验中文

#6


我记得字符串对象有length属性的吧

#7


<script language="javascript" type="text/javascript"> 
    new function(s) {  // s指最后括号中的参数"你好abc"

//arguments指最下面括号中的参数集, .length指此集合的参数个数
//如果最下面括号中是("你好abc","真诚得分"),那么arguments={"你好abc","真诚得分"}, .length=2
//!s 如楼上所解,表示参数是否非空
if(!arguments.length||!s) 
   return null; 
if(""==s)
   return 0; 
var l=0; 
for(var i=0;i <s.length;i++){ 
           //中文的值都是大于255的,所以“你好”为4个字节,可以测试:alert(s.charCodeAt(i));
   if(s.charCodeAt(i)>255) 
              l+=2; 
   else
      l++; 

alert(l); 
   }("你好abc"); 
</script> 

#8


路过

#9


function getL(input)
{
    var out = input.replace(/[^\x00-\xff]/g,'**');
    return out.length;
}

#10


之前写过一个取指定长度字符的,中文字符算两个,可以参考一下相关的计算方法:


<script type="text/javascript">

var getStr = function(str,n){
    var tmpStr = str.substr(0,n);
    var tmpCode = tmpStr.replace(/[^\x00-\xff]/g,'\r\n').split('');
    n = (tmpCode[n-1]=='\r')?n-2:n-1;
    var l = tmpCode.slice(0,n).join('').replace(/\r\n/g,'*').length+1;
    return tmpStr.substr(0,l);
};

alert(getStr('我ABC汉DE字',6));

</script>


演示请参见 JSLib中[取字符中文算两个]部分

#11


学习了

#12


顶9楼

#1


arguments 表示传入的参数集,!s表示s有值不为空

#2


arguments 参数的集合
arguments[0]代表第一个参数
arguments.length代表参数的个数
!s  s是参数  if(!s)是说参数不存在,执行return null;
charCodeAt()  返回的是Unicode 编码
如:
<script type="text/javascript">
var str="a"
alert(str.charCodeAt(0))
</script>
返回97
if(s.charCodeAt(i)>255) l+=2; 
估计Unicode 编码中大于255的算2个字节吧  汉字之类的

#3


js用的是unicode
汉字跟英文字母按理说应该是一样长的

#4


学习

#5


引用 2 楼 liaoliaoss 的回复:
arguments 参数的集合 
arguments[0]代表第一个参数 
arguments.length代表参数的个数 
!s  s是参数  if(!s)是说参数不存在,执行return null; 
charCodeAt()  返回的是Unicode 编码 
如: 
<script type="text/javascript"> 
var str="a" 
alert(str.charCodeAt(0)) 
</script> 
返回97 
if(s.charCodeAt(i)>255) l+=2; 
估计Unicode 编码中大于255的算2个字节吧  汉字之类的

详细 正解if(s.charCodeAt(i)>255) l+=2; 检验中文

#6


我记得字符串对象有length属性的吧

#7


<script language="javascript" type="text/javascript"> 
    new function(s) {  // s指最后括号中的参数"你好abc"

//arguments指最下面括号中的参数集, .length指此集合的参数个数
//如果最下面括号中是("你好abc","真诚得分"),那么arguments={"你好abc","真诚得分"}, .length=2
//!s 如楼上所解,表示参数是否非空
if(!arguments.length||!s) 
   return null; 
if(""==s)
   return 0; 
var l=0; 
for(var i=0;i <s.length;i++){ 
           //中文的值都是大于255的,所以“你好”为4个字节,可以测试:alert(s.charCodeAt(i));
   if(s.charCodeAt(i)>255) 
              l+=2; 
   else
      l++; 

alert(l); 
   }("你好abc"); 
</script> 

#8


路过

#9


function getL(input)
{
    var out = input.replace(/[^\x00-\xff]/g,'**');
    return out.length;
}

#10


之前写过一个取指定长度字符的,中文字符算两个,可以参考一下相关的计算方法:


<script type="text/javascript">

var getStr = function(str,n){
    var tmpStr = str.substr(0,n);
    var tmpCode = tmpStr.replace(/[^\x00-\xff]/g,'\r\n').split('');
    n = (tmpCode[n-1]=='\r')?n-2:n-1;
    var l = tmpCode.slice(0,n).join('').replace(/\r\n/g,'*').length+1;
    return tmpStr.substr(0,l);
};

alert(getStr('我ABC汉DE字',6));

</script>


演示请参见 JSLib中[取字符中文算两个]部分

#11


学习了

#12


顶9楼

相关文章