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 相关文章推荐
ASP Json Parser修正版
Dec 06 Javascript
jquery对象和javascript对象即DOM对象相互转换
Aug 07 Javascript
JavaScript获取Url里的参数
Dec 18 Javascript
Node.js重新刷新session过期时间的方法
Feb 04 Javascript
jQuery 移动端拖拽(模块化开发,触摸事件,webpack)
Oct 28 Javascript
JavaScript使用原型和原型链实现对象继承的方法详解
Apr 05 Javascript
浅谈Vue数据绑定的原理
Jan 08 Javascript
简单的Vue SSR的示例代码
Jan 12 Javascript
微信小程序如何获取用户信息
Jan 26 Javascript
nest.js 使用express需要提供多个静态目录的操作方法
Oct 24 Javascript
浅谈Vue3 Composition API如何替换Vue Mixins
Apr 29 Javascript
vue 项目中当访问路由不存在的时候默认访问404页面操作
Aug 31 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
PHP中使用file_get_contents抓取网页中文乱码问题解决方法
2014/12/17 PHP
PHP实现字母数字混合验证码功能
2019/07/11 PHP
javascript dom 操作详解 js加强
2009/07/13 Javascript
PPK 谈 JavaScript 的 this 关键字 [翻译]
2009/09/29 Javascript
跨浏览器开发经验总结(三)   警惕“IE依赖综合症”
2010/05/13 Javascript
Extjs 3.3切换tab隐藏相应工具栏出现空白解决
2013/04/02 Javascript
jquery实现文字由下到上循环滚动的实例代码
2013/08/09 Javascript
一些老手都不一定知道的JavaScript技巧
2014/05/06 Javascript
js判断手机端(Android手机还是iPhone手机)
2015/07/22 Javascript
WordPress 单页面上一页下一页的实现方法【附代码】
2016/03/10 Javascript
JavaScript 闭包详细介绍
2016/09/28 Javascript
ExtJs的Ext.Ajax.request实现waitMsg等待提示效果
2017/06/14 Javascript
浅谈vuepress 踩坑记
2018/04/18 Javascript
微信小程序带动画弹窗组件使用方法详解
2018/11/27 Javascript
layer iframe 设置关闭按钮的方法
2019/09/12 Javascript
使用Python写CUDA程序的方法
2017/03/27 Python
Python 实现文件打包、上传与校验的方法
2019/02/13 Python
Python flask框架实现查询数据库并显示数据
2020/06/04 Python
Python基于数列实现购物车程序过程详解
2020/06/09 Python
Python Serial串口基本操作(收发数据)
2020/11/06 Python
使用CSS3和Checkbox实现JQuery的一些效果
2015/08/03 HTML / CSS
女孩每月服装订阅盒:kidpik
2019/04/17 全球购物
全球性的女装店:storets
2019/06/12 全球购物
创业计划书——互联网商机
2014/01/12 职场文书
助人为乐表扬信范文
2014/01/14 职场文书
中考冲刺决心书
2014/03/11 职场文书
总经理任命书
2014/03/29 职场文书
会计电算化专业求职信
2014/06/10 职场文书
乱丢垃圾袋检讨书
2014/10/08 职场文书
优秀班主任申报材料
2014/12/16 职场文书
本溪关门山导游词
2015/02/09 职场文书
同学聚会通知短信
2015/04/20 职场文书
小学学习委员竞选稿
2015/11/20 职场文书
上手简单,功能强大的Python爬虫框架——feapder
2021/04/27 Python
nginx配置文件使用环境变量的操作方法
2021/06/02 Servers
基于Redis的List实现特价商品列表功能
2021/08/30 Redis