最近遇到的试题 1.求字符串的字节长度(英文一个字节,汉字两个字节) 
1 2 3 4 5 6 7 8 9 10 11 /*charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。*/ function  getByte(str) {    var len = str.length,         bytes = 0;     for  (var i = 0; i < str.length; i++) {         if  (str[i].charCodeAt() > 255) {             bytes++;         }     }     return  len + bytes; } 
 
 
2.specify(“hello world”)// => ‘h e l l o w o r l d’ 实现specify函数 
1 2 3 String.prototype.specify = function  () {     return  this.replace(/\s*/g, "" ).split ("" ).join (" " ); } 
 
3.数组去重 
1 2 3 4 5 6 7 8 9 10 11 12 function  unique(arr) {    var _obj = {},         _arr = [],         len = arr.length;     for  (var i = 0; i < len; i++) {         if  (!_obj[arr[i]]) {             _obj[arr[i]] = 1;             _arr.push(arr[i]);         }     }     return  _arr; } 
 
4.实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 Object.prototype.clone = function  () {     var o = typeof(this) === "object"  ? {} : [];     for  (e in  this) {         o[e] = typeof(this[e]) === "object"  ? this[e].clone () : this[e];     }     return  o; } deepClone: function (obj) {     var buf,         _this = this;     if  (obj instanceof Array) {         buf = []; //创建一个空数组         var len = obj.length;         while  (len--) {             buf[len] = _this.deepClone(obj[len]);         }         return  buf;     } else  if  (obj instanceof Object) {         buf = {}; //创建一个空对象         for  (var k in  obj) {             buf[k] = _this.deepClone(obj[k]);         }         return  buf;     } else  {         return  obj;     } } 
 
5.下面这个结构,点击每一列的时候alert其index?(最好使用闭包) 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <ul id ="test" >   <li>这是第一条</li>   <li这是第二条</li>   <li这是第三条</li> </ul> var domList = document.getElementById("test" ).getElementsByTagName("li" ),     len = domList.length; for  (var i = 0; i < domList.length; i++) {    domList[i].index = i;     domList[i].onclick = function  () {         console.log(this.index);     } } var domList = document.getElementById("test" ).getElementsByTagName("li" ),     len = domList.length; for  (var i = 0; i < domList.length; i++) {    domList[i].onclick = (function (n) {         return  function  () {             console.log(n);         }     })(i); } 
 
6.将伪数组转化为标准数组 
1 2 3 function  arrayLike  () {    return  Array.prototype.slice.call(arguments); } 
 
7.有这样一个URL:http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e,请写一段JS程序提取URL中的各个GET参数(参数名和参数个数不确定),将其按key-value形式返回到一个json结构中  
1 2 3 4 5 6 7 8 9 10 11 12 function  serilizeUrl(url) {    var result = {};     url = url.split("?" )[1];     if  (!url) return  null;     var map = url.split("&" ),         len = map.length;     for  (var i = 0; i < len; i++) {         var _arr = map[i].split ("=" );         result[_arr[0]] = _arr[1];     }     return  result; } 
 
8.兔子数列是什么(前面相邻两项之和,构成了后一项) 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 var result = []; function  rabbit(n) { //月数 返回成对兔子数    if  (n == 1) {         return  1;     } else  if  (n == 2) {         return  1;     } else  {         if  (result[n]) {             return  result[n];         } else  {             result[n] = arguments.callee(n - 1) + arguments.callee(n - 2);             return  result[n];         }     } } 
 
9.从一个给定的数组arr中,随机返回num个不重复项 
1 2 3 4 5 6 7 8 9 10 11 function  getArrayItems(arr, num) {    var _arr = [];     for  (var i = 0; i < num; i++) {         if  (arr.length > 0) {             var index = Math.floor(Math.random() * arr.length);             _arr[i] = arr[index];             arr.splice(index, 1);         }     }     return  _arr; } 
 
结语 !!!:得让你用笔去答题 
上面的试题,虽然难度不高, 但是它考验了一个程序员基本的逻辑思维,当你思路都不清晰了,你能保证你的程序能正常运行吗? 上面并没有要求你用多精妙的方法去实现,只是要求实现而已。