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 相关文章推荐
获取客户端电脑日期时间js代码(jquery)
Sep 12 Javascript
jquery固定底网站底部菜单效果
Aug 13 Javascript
获取select元素被选中的文本内容的js代码
Jan 29 Javascript
在easyUI开发中,出现jquery.easyui.min.js函数库问题的解决办法
Sep 11 Javascript
JavaScript实现身份证验证代码
Feb 17 Javascript
基于BootStrap Metronic开发框架经验小结【四】Bootstrap图标的提取和利用
May 12 Javascript
Vue.directive自定义指令的使用详解
Mar 10 Javascript
深入理解vue-router之keep-alive
Aug 31 Javascript
JavaScript数组的5种迭代方法
Sep 29 Javascript
微信小程序倒计时功能实现代码
Nov 09 Javascript
详解微信小程序获取当前时间及日期的方法
Apr 28 Javascript
详解Vue中的watch和computed
Nov 09 Javascript
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
Laravel框架学习笔记(二)项目实战之模型(Models)
2014/10/15 PHP
织梦sitemap地图实时推送给百度的教程
2015/08/03 PHP
php DES加密算法实例分析
2019/09/18 PHP
web 页面分页打印的实现
2009/06/22 Javascript
jQuery ctrl+Enter shift+Enter实现代码
2010/02/07 Javascript
jquery调用asp.net 页面后台的实现代码
2011/04/27 Javascript
JS 实现Json查询的方法实例
2013/04/12 Javascript
javascript关于运动的各种问题经典总结
2015/04/27 Javascript
3种js实现string的substring方法
2015/11/09 Javascript
举例说明如何为JavaScript的方法参数设置默认值
2015/11/17 Javascript
jquery仿QQ登录账号选择下拉框效果
2016/03/22 Javascript
微信小程序 wxapp内容组件 text详细介绍
2016/10/31 Javascript
详解mpvue scroll-view自动回弹bug解决方案
2018/10/01 Javascript
nodejs中用npm初始化来创建package.json的实例讲解
2018/10/10 NodeJs
vscode调试node.js的实现方法
2020/03/22 Javascript
vue项目或网页上实现文字转换成语音播放功能
2020/06/09 Javascript
python 域名分析工具实现代码
2009/07/15 Python
浅谈Python的文件类型
2016/05/30 Python
python3.5使用tkinter制作记事本
2016/06/20 Python
Python日志模块logging基本用法分析
2018/08/23 Python
在win10和linux上分别安装Python虚拟环境的方法步骤
2019/05/09 Python
python交互模式下输入换行/输入多行命令的方法
2019/07/02 Python
python模拟键盘输入 切换键盘布局过程解析
2019/08/15 Python
python os模块在系统管理中的应用
2020/06/22 Python
Python如何读取、写入CSV数据
2020/07/28 Python
html5实现微信打飞机游戏
2014/03/27 HTML / CSS
番木瓜健康和保健产品第一大制造商:Herbal Papaya
2017/04/25 全球购物
Can a struct inherit from another struct? (结构体能继承结构体吗)
2016/09/25 面试题
应届毕业生个人求职自荐信
2014/01/06 职场文书
中药专业自荐信范文
2014/03/18 职场文书
2014年信访工作总结
2014/11/17 职场文书
2015年团队工作总结范文
2015/05/04 职场文书
导游词之大雁塔景区
2019/09/17 职场文书
python实现大文本文件分割成多个小文件
2021/04/20 Python
MySQL 聚合函数排序
2021/07/16 MySQL
oracle连接ODBC sqlserver数据源的详细步骤
2021/07/25 Oracle