本文实例讲述了几道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小时内与您取得联系。