JavaScript面试题

来源:互联网 发布:河南人 知乎 编辑:程序博客网 时间:2024/04/30 05:58

题目1:

实现一个遍历数组或对象里所有成员的迭代器。

var each = function(obj, fn){

        //+++++++++++答题区域+++++++++++   


        //+++++++++++答题结束+++++++++++
};

try{        
        var data1 = [4,5,6,7,8,9,10,11,12];
        var data2 = {
                "a": 4,
                "b": 5,
                "c": 6
        };        
        console.group(data1);
        
        each(data1, function(o){
                if( 6 == this )
                        return true;
                else if( 8 == this )
                        return false;
                console.log(o + ": \"" + this + "\"");
        });
        
        console.groupEnd();

        /*------[执行结果]------
        1: "4"
        2: "5"
        4: "7"
        ------------------*/        
        console.group(data2);
        
        each(data2, function(v, n){
                if( 5 == this )
                        return true;
                console.log(n + ": \"" + v + "\"");
        });
        
        console.groupEnd();

        /*------[执行结果]------
        a: "4"
        c: "6"
        ------------------*/        
}catch(e){

        console.error("执行出错,错误信息: " + e);

题目2:

实现一个叫Man的类,包含attr, words, say三个方法。

var Man;
//+++++++++++答题区域+++++++++++



//+++++++++++答题结束+++++++++++
try{        
        var me = Man({ fullname: "小红" });
        var she = new Man({ fullname: "小红" });
        
        console.group();
        console.info("我的名字是:" + me.attr("fullname") + "\n我的性别是:" + me.attr("gender"));
        console.groupEnd();


        /*------[执行结果]------

        我的名字是:小红
        我的性别是:<用户未输入>
        ------------------*/


        me.attr("fullname", "小明");
        me.attr("gender", "男");
        me.fullname = "废柴";
        me.gender = "人妖"; 
        she.attr("gender", "女");
        
        console.group();
        console.info("我的名字是:" + me.attr("fullname") + "\n我的性别是:" + me.attr("gender"));
        console.groupEnd();


        /*------[执行结果]------

        我的名字是:小明
        我的性别是:男
        ------------------*/
        
        console.group();
        console.info("我的名字是:" + she.attr("fullname") + "\n我的性别是:" + she.attr("gender"));
        console.groupEnd();


        /*------[执行结果]------
        我的名字是:小红
        我的性别是:女
        ------------------*/

        me.attr({
                "words-limit": 3,
                "words-emote": "微笑"
        });
        me.words("我喜欢看视频。");
        me.words("我们的办公室太漂亮了。");
        me.words("视频里美女真多!");
        me.words("我平时都看优酷!");
        
        console.group();
        console.log(me.say());


        /*------[执行结果]------
        小明微笑:"我喜欢看视频。我们的办公室太漂亮了。视频里美女真多!"
        ------------------*/


        me.attr({
                "words-limit": 2,
                "words-emote": "喊"
        });

        console.log(me.say());
        console.groupEnd();


        /*------[执行结果]------

        小明喊:"我喜欢看视频。我们的办公室太漂亮了。"
        ------------------*/
        
}catch(e){
        console.error("执行出错,错误信息: " + e);
}

}

题目3:
实现一个URI解析方法,把url里#之后的参数解析成指定的数据结构。

function urlParser(s){
        //+++++++++++答题区域+++++++++++

                
        //+++++++++++答题结束+++++++++++
}
try{
        var url1 = "http://www.abc.com/m/s/#page/2/?type=latest_videos&page_size=20";
        var url2 = "http://www.abc.com/m/s/#type=latest_videos&page_size=20";
        var url3 = "http://www.abc.com/m/s/#page?type=latest_videos&page_size=20";

        console.group();
        console.info( urlParser(url1) );
        console.info( urlParser(url2) );
        console.info( urlParser(url3) );
        console.groupEnd();


        /*------[执行结果]------
        ["page", "2", { "type": "latest_videos", "page_size": 20 }]
        [{ "type": "latest_videos", "page_size": 20 }]
        ["page", { "type": "latest_videos", "page_size": 20 }]        
        ------------------*/
        
}catch(e){
        console.error("执行出错,错误信息: " + e);
}

网上参考答案:

/* 第一题 */

var each = function(obj, fn){        
         var len = obj.length,i = 0;
         if( typeof(len) == 'undefined' ){
                 //如果是对象 ps:对象没有length属性
                 for( i in obj ){
                    fn.call(obj[i], obj[i], i);
                 }
         }
         else{
            //如果是数组
                for(; i<len; i++){
                   if ( false === fn.call(obj[i],i+1) ){
                      break;
                   }
                }
         }
};

/* 第二题 */
var Man;
//+++++++++++答题区域+++++++++++

Man = function( obj ){
  return new Man.fn.init( obj );
}
Man.fn = Man.prototype = {
  init:function( obj ){
          
          this.info = {
         fullname:'',
                 gender:'',
                 word:[],
                 'words-limit':0,
         'words-emote':'' 
      }
          for(var i in obj ){
             this.info[i] = obj[i];
          }
          
          return this;
  },
  attr:function( name, value ){
          if( typeof(name) == 'object'){
              for(var i in name ){
                    this.info[i] = name[i];
                  }
          }
          else if( value ){
             this.info[name] = value;
          }
          else{
             return this.info[name] || '<用户未输入>';
          }
  },
  words:function( value ){
          this.info['word'].push(value);
  },
  say:function(){
          var inf = this.info, n = 0, str = '';
          
          while( n < inf['words-limit'] ){
                  str += inf['word'][n],n++;
          }
          return inf['fullname'] + inf['words-emote'] + ":\"" + str + "\"";
  }
}
Man.fn.init.prototype = Man.prototype;

/* 第三题 */
function urlParser(s){
    var re = [],a,i,t,o={},reg = /([\w]+)(\/?|=)([\w]+)/g;                
                
        a = (s.split('#')[1] || '').match( reg );
        
        for(i=0; i<a.length; i++){
                if( a[i].indexOf('=') == -1 ){
                        if( a[i].indexOf('/') == -1 ){
                                        re.push(a[i]);
                        }else{
                                        t = a[i].split('/');
                                        re.push(t[0],t[1]);
                        }
                }
                else if( a[i].indexOf('=') >= 0 ){
                            t = a[i].split('=');
                                o[t[0]] = t[1];
                }
        }        
        re.push(o);        
        return re;
}

原创粉丝点击