JS搜狐面试题分析
本文实例讲述了几道JS搜狐面试题。分享给大家供大家参考,具体如下:
一、实现一个遍历数组或对象里所有成员的迭代器。
vareach=function(obj,fn){
//+++++++++++答题区域+++++++++++
//+++++++++++答题结束+++++++++++
};
try{
vardata1=[4,5,6,7,8,9,10,11,12];
vardata2={
"a":4,
"b":5,
"c":6
};
console.group(data1);
each(data1,function(o){
if(6==this)
returntrue;
elseif(8==this)
returnfalse;
console.log(o+":\""+this+"\"");
});
console.groupEnd();
/*------[执行结果]------
1:"4"
2:"5"
4:"7"
------------------*/
console.group(data2);
each(data2,function(v,n){
if(5==this)
returntrue;
console.log(n+":\""+v+"\"");
});
console.groupEnd();
/*------[执行结果]------
a:"4"
c:"6"
------------------*/
}catch(e){
console.error("执行出错,错误信息:"+e);
}
【思路分析】
1.首先判断传进来的是数组还是对象,用到instanceof,typeof和instanceof都可以用来判断js变量类型,用法区别
typeof(obj)//typeof会返回一个基本数据类型
objinstanceofArray//instanceof一般是用来验证一个对象是否属于某类
注:typeof遇到null,数组,对象都会返回object类型
vareach=function(obj,fn){
if(objinstanceofArray){
}
elseif(objinstanceofObject){
}
};
2.遍历数组和遍历对象的区别
遍历数组:
for(vari=0,j=array.length;i<j;i++){
alert(array[i]);
}
遍历对象:
for(vareindata){
alert(data[e]);
}
3.分析结果
each(data1,function(o){
if(6==this)
returntrue;//表示跳过并继续遍历
elseif(8==this)
returnfalse;//表示停止遍历
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(objinstanceofArray){
for(vari=0,j=obj.length;i<j;i++){
vartemp=fn.call(obj[i],i+1);
if(temp===false){//===值和类型都要等,==只是值相同null==false
return;
}
}
}
同理,遍历对象
elseif(objinstanceofObject){
for(vareinobj){
fn.call(obj[e],obj[e],e);//第一个参数v(对象值),第二个n(对象索引)
}
}
注:objinstanceofObject要在objinstanceofArray之后,因为数组属于对象,Object在前面的话,后面的判断就不执行了
二、实现一个叫Man的类,包含attr,words,say三个方法。
varMan;
//+++++++++++答题区域+++++++++++
//+++++++++++答题结束+++++++++++
try{
varme=Man({fullname:"小红"});
varshe=newMan({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.
varme=Man({fullname:"小红"});
varshe=newMan({fullname:"小红"});
更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript中json操作技巧总结》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。