还记得之前讲过的第十三课内容:基本包装类型里面的charCodeAt(n)这个字符串的方法吗?这个就是本节练习的主角了。
charCodeAt(n):以Unicode编码返回指定位置索引。由于中文字符Unicode编码大于255,故而能够得出一个字符串的实际长度。
第一种:使用原型方法:
String.prototype.getStrLen = function(){ //var time1 = new Date; var _this = this; if(!_this || _this.length == 0) return null; //if(!arguments.length|| !_this ) return null; if(" " == _this) return 0; var l = 0; for(var i = 0; i<_this.length; i++){ if(_this.charCodeAt(i)>255) l+=2; else l++; } //console.log("耗时:" + (new Date - time1) + " 毫秒"); return l; } console.log(str.getStrLen());
第二种:使用函数计算字符串方法一
function strLen(str){ var time1 = new Date; if(str.length ==0 || !str) return null; var l = 0; for(var i = 0; i<str.length; i++){ if(str.charCodeAt(i) >255) l+=2; else l++; } console.log("耗时:" + (new Date - time1) + " 毫秒"); return l; } console.log(strLen(str));
第三种:使用函数计算字符串方法二(跟上一种有所不同)
function strLength(str){ var time1 = new Date; if(str.length == 0 || !str) return null; var l = str.length; for(var i = 0; i< str.length; i++){ if(str.charCodeAt(i) > 255) l++; } console.log("耗时:" + (new Date - time1) + " 毫秒"); return l; } console.log(strLength(str));
结果:原本以为使用原型方法会比较快,事实证明这只是我的一厢情愿而已,原型方法计算出来的结果是他们的后面两个的4倍左右。
而使用函数的方法中,第三种是最快的。
查看比较结果(用谷歌开发工具打开)