JS搜狐面试题分析


Posted in Javascript onDecember 16, 2016

本文实例讲述了几道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程序设计有所帮助。

Javascript 相关文章推荐
Jquery 点击按钮显示和隐藏层的代码
Jul 25 Javascript
Javascript学习笔记之函数篇(四):arguments 对象
Nov 23 Javascript
JavaScript 表单处理实现代码
Apr 13 Javascript
JS实现简单的右下角弹出提示窗口完整实例
Jun 21 Javascript
微信小程序 配置文件详细介绍
Dec 14 Javascript
bootstrap suggest下拉框使用详解
Apr 10 Javascript
BootStrap导航栏问题记录
Jul 31 Javascript
微信小程序多列选择器range-key使用详解
Mar 30 Javascript
浅谈Node Inspector 代理实现
Oct 19 Javascript
Angular中支持SCSS的方法
Nov 18 Javascript
Vue infinite update loop的问题解决
Apr 23 Javascript
vue中watch的用法汇总
Dec 28 Vue.js
JS重载实现方法分析
Dec 16 #Javascript
概述一个页面从输入URL到页面加载完的过程
Dec 16 #Javascript
详解MVC如何使用开源分页插件(shenniu.pager.js)
Dec 16 #Javascript
js继承实现方法详解
Dec 16 #Javascript
详解jQuery简单的表格应用
Dec 16 #Javascript
JS中parseInt()和map()用法分析
Dec 16 #Javascript
HTML5canvas 绘制一个圆环形的进度表示实例
Dec 16 #Javascript
You might like
php弹出对话框实现重定向代码
2014/01/23 PHP
10个php函数实用却不常见
2015/10/13 PHP
PHP 传输会话curl函数的实例详解
2017/09/12 PHP
PHP获取类私有属性的3种方法
2020/09/10 PHP
浅析javascript闭包 实例分析
2010/12/25 Javascript
JQuyer $.post 与 $.ajax 访问WCF ajax service 时的问题需要注意的地方
2011/09/20 Javascript
javaScript array(数组)使用字符串作为数组下标的方法
2013/11/19 Javascript
jquery弹出层类代码分享
2013/12/27 Javascript
jQuery/CSS3图片特效插件整理推荐
2014/12/07 Javascript
jQuery中element选择器用法实例
2014/12/29 Javascript
JS控制表格实现一条光线流动分割行的方法
2015/03/09 Javascript
用户代理字符串userAgent可实现的四个识别
2015/09/20 Javascript
完美解决IE不支持Data.parse()的问题
2016/11/24 Javascript
jQuery插件DataTables分页开发心得体会
2017/08/22 jQuery
JavaScript代码执行的先后顺序问题
2017/10/29 Javascript
tsconfig.json配置详解
2019/05/17 Javascript
javascript中undefined的本质解析
2019/07/31 Javascript
python用ConfigObj读写配置文件的实现代码
2013/03/04 Python
Python实现按当前日期(年、月、日)创建多级目录的方法
2018/04/26 Python
WxPython建立批量录入框窗口
2019/02/27 Python
Python 调用 Windows API COM 新法
2019/08/22 Python
简单了解python数组的基本操作
2019/11/26 Python
python游戏开发的五个案例分享
2020/03/09 Python
Python pip使用超时问题解决方案
2020/08/03 Python
基于html5绘制圆形多角图案
2016/04/21 HTML / CSS
下列程序在32位linux或unix中的结果是什么
2015/01/26 面试题
护理毕业生自我鉴定
2014/02/11 职场文书
五四演讲稿范文
2014/09/03 职场文书
特岗教师个人总结
2015/02/10 职场文书
公司门卫岗位职责
2015/04/13 职场文书
2015年中学校长工作总结
2015/05/19 职场文书
信息技术国培研修日志
2015/11/13 职场文书
2016教师给学生的毕业寄语
2015/12/04 职场文书
《西门豹》教学反思
2016/02/23 职场文书
mysql中如何用命令创建联合唯一索引
2022/04/20 MySQL
VUE解决跨域问题Access to XMLHttpRequest at
2022/05/06 Vue.js