全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

JS搜狐面试题分析

本文实例讲述了几道JS搜狐面试题。分享给大家供大家参考,具体如下:

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

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);
}

【思路分析】

1.首先判断传进来的是数组还是对象,用到instanceof,typeof和instanceof都可以用来判断js变量类型,用法区别

typeof(obj) //typeof会返回一个基本数据类型

obj instanceof Array //instanceof一般是用来验证一个对象是否属于某类

注:typeof遇到null,数组,对象都会返回object类型

var each = function(obj, fn){
  if(obj instanceof Array){
  }
  else if(obj instanceof Object){
  }
};

2.遍历数组和遍历对象的区别

遍历数组:

for(var i=0,j=array.length;i<j;i++){
  alert(array[i]);
}

遍历对象:

for(var e in data){
  alert(data[e]);
}

3.分析结果

each(data1, function(o){
  if( 6 == this )
    return true;      //表示跳过并继续遍历
  else if( 8 == this )
    return false;     //表示停止遍历
  console.log(o + ": \"" + this + "\"");
});

如果直接for循环,那会输出数组所有元素,现在有个each函数,应该让他指向obj中的元素(即改变this指向,让this代表obj[i])

fn.call(obj[i],i+1); //fn是each的第二个参数,让这个函数指向obj中的元素,第一个参数o,让让它传值i+1

仅仅这样会输出4,5,7,8,9,10,11,12,所以还需要限定让它等于8的时候跳出整个循环

if(obj instanceof Array){
  for(var i=0,j=obj.length;i<j;i++){
    var temp=fn.call(obj[i],i+1);
    if(temp===false){    //===值和类型都要等,==只是值相同null==false
      return;
    }
  }
}

同理,遍历对象

else if(obj instanceof Object){
  for(var e in obj){
    fn.call(obj[e],obj[e],e);    //第一个参数v(对象值),第二个n(对象索引)
  }
}

注:obj instanceof Object要在obj instanceof Array之后,因为数组属于对象,Object在前面的话,后面的判断就不执行了

二、实现一个叫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);
}

思路分析:

1.先来一个构造函数

Man=function(info){
};

2.

var me = Man({ fullname: "小红" });
var she = new Man({ fullname: "小红" });

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript中json操作技巧总结》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。


# JS  # 搜狐  # 面试题  # 详解JS中的this、apply、call、bind(经典面试题)  # 关于javascript作用域的常见面试题分享  # 10道典型的JavaScript面试题  # 80%应聘者都不及格的JS面试题  # Javascript前端经典的面试题及答案  # 一道面试题引发的对javascript类型转换的思考  # JavaScript中最常见的三个面试题解析  # JavaScript面试题(指针、帽子和女朋友)  # 关于js原型的面试题讲解  # JavaScript面试题大全(推荐)  # AngularJS 面试题集锦  # js前端面试题及答案整理(一)  # 14 个折磨人的 JavaScript 面试题  # JS面试题---关于算法台阶的问题  # 一道优雅面试题分析js中fn()和return fn()的区别  # 一道关于JavaScript变量作用域的面试题  # 一道常被人轻视的web前端常见面试题(JS)  # 最新Javascript程序员面试试题和解题方法  # 遍历  # 小红  # 小明  # 第一个  # 第二个  # 让它  # 错误信息  # 真多  # 的是  # 有个  # 相关内容  # 让他  # 都要  # 就不  # 要在  # 数据结构  # 给大家  # 还需要  # 一个叫 


相关文章: 建站主机是什么?如何选择适合的建站主机?  淘宝制作网站有哪些,淘宝网官网主页?  网站图片在线制作软件,怎么在图片上做链接?  制作网站的公司有哪些,做一个公司网站要多少钱?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  网站制作费用多少钱,一个网站的运营,需要哪些费用?  建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析  个人摄影网站制作流程,摄影爱好者都去什么网站?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  如何通过西部建站助手安装IIS服务器?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  nginx修改上传文件大小限制的方法  表情包在线制作网站免费,表情包怎么弄?  如何在万网自助建站平台快速创建网站?  天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?  招商网站制作流程,网站招商广告语?  如何在建站之星网店版论坛获取技术支持?  ,巨量百应是干嘛的?  C#如何使用XPathNavigator高效查询XML  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  高端建站如何打造兼具美学与转化的品牌官网?  制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?  如何用搬瓦工VPS快速搭建个人网站?  h5在线制作网站电脑版下载,h5网页制作软件?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  怀化网站制作公司,怀化新生儿上户网上办理流程?  婚礼视频制作网站,学习*后期制作的网站有哪些?  建站之星安装失败:服务器环境不兼容?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  建站之星2.7模板快速切换与批量管理功能操作指南  建站之星如何通过成品分离优化网站效率?  如何快速完成中国万网建站详细流程?  c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】  如何正确下载安装西数主机建站助手?  如何快速搭建高效可靠的建站解决方案?  如何快速生成高效建站系统源代码?  如何获取免费开源的自助建站系统源码?  如何通过虚拟主机快速完成网站搭建?  高性能网站服务器部署指南:稳定运行与安全配置优化方案  太平洋网站制作公司,网络用语太平洋是什么意思?  如何用AWS免费套餐快速搭建高效网站?  如何在香港服务器上快速搭建免备案网站?  如何通过PHP快速构建高效问答网站功能?  如何在Tomcat中配置并部署网站项目?  深圳网站制作案例,网页的相关名词有哪些?  如何通过云梦建站系统实现SEO快速优化?  建站之星伪静态规则如何正确配置?  已有域名如何快速搭建专属网站?  如何快速登录WAP自助建站平台?  如何生成腾讯云建站专用兑换码? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。