JS搜狐面试题分析

发布时间 - 2026-01-10 21:53:20    点击率:

本文实例讲述了几道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程序员面试试题和解题方法  # 遍历  # 小红  # 小明  # 第一个  # 第二个  # 让它  # 错误信息  # 真多  # 的是  # 有个  # 相关内容  # 让他  # 都要  # 就不  # 要在  # 数据结构  # 给大家  # 还需要  # 一个叫 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 详解jQuery中基本的动画方法  Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)  如何在宝塔面板创建新站点?  如何在建站之星网店版论坛获取技术支持?  Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理  如何快速搭建安全的FTP站点?  Laravel如何配置和使用缓存?(Redis代码示例)  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  Laravel如何使用Livewire构建动态组件?(入门代码)  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  如何在IIS管理器中快速创建并配置网站?  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  Laravel如何处理表单验证?(Requests代码示例)  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  如何实现javascript表单验证_正则表达式有哪些实用技巧  香港服务器WordPress建站指南:SEO优化与高效部署策略  如何挑选高效建站主机与优质域名?  高端建站如何打造兼具美学与转化的品牌官网?  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  iOS正则表达式验证手机号、邮箱、身份证号等  Android Socket接口实现即时通讯实例代码  Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  香港服务器选型指南:免备案配置与高效建站方案解析  公司门户网站制作流程,华为官网怎么做?  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  Laravel如何为API编写文档_Laravel API文档生成与维护方法  java ZXing生成二维码及条码实例分享  如何快速配置高效服务器建站软件?  laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法  网易LOFTER官网链接 老福特网页版登录地址  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  Linux系统运维自动化项目教程_Ansible批量管理实战  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  Laravel中的withCount方法怎么高效统计关联模型数量  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  SQL查询语句优化的实用方法总结  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  东莞市网站制作公司有哪些,东莞找工作用什么网站好?