当前位置:Gxlcms > JavaScript > JS搜狐面试题分析

JS搜狐面试题分析

时间:2021-07-01 10:21:17 帮助过:11人阅读

本文实例讲述了几道JS搜狐面试题。分享给大家供大家参考,具体如下:

一、实现一个遍历数组或对象里所有成员的迭代器。

  1. var each = function(obj, fn){
  2. //+++++++++++答题区域+++++++++++
  3. //+++++++++++答题结束+++++++++++
  4. };
  5. try{
  6. var data1 = [4,5,6,7,8,9,10,11,12];
  7. var data2 = {
  8. "a": 4,
  9. "b": 5,
  10. "c": 6
  11. };
  12. console.group(data1);
  13. each(data1, function(o){
  14. if( 6 == this )
  15. return true;
  16. else if( 8 == this )
  17. return false;
  18. console.log(o + ": \"" + this + "\"");
  19. });
  20. console.groupEnd();
  21. /*------[执行结果]------
  22. 1: "4"
  23. 2: "5"
  24. 4: "7"
  25. ------------------*/
  26. console.group(data2);
  27. each(data2, function(v, n){
  28. if( 5 == this )
  29. return true;
  30. console.log(n + ": \"" + v + "\"");
  31. });
  32. console.groupEnd();
  33. /*------[执行结果]------
  34. a: "4"
  35. c: "6"
  36. ------------------*/
  37. }catch(e){
  38. console.error("执行出错,错误信息: " + e);
  39. }

【思路分析】

1.首先判断传进来的是数组还是对象,用到instanceof,typeof和instanceof都可以用来判断js变量类型,用法区别

typeof(obj) //typeof会返回一个基本数据类型

obj instanceof Array //instanceof一般是用来验证一个对象是否属于某类

注:typeof遇到null,数组,对象都会返回object类型

  1. var each = function(obj, fn){
  2. if(obj instanceof Array){
  3. }
  4. else if(obj instanceof Object){
  5. }
  6. };

2.遍历数组和遍历对象的区别

遍历数组:

  1. for(var i=0,j=array.length;i<j;i++){
  2. alert(array[i]);
  3. }

遍历对象:

  1. for(var e in data){
  2. alert(data[e]);
  3. }

3.分析结果

  1. each(data1, function(o){
  2. if( 6 == this )
  3. return true; //表示跳过并继续遍历
  4. else if( 8 == this )
  5. return false; //表示停止遍历
  6. console.log(o + ": \"" + this + "\"");
  7. });

如果直接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的时候跳出整个循环

  1. if(obj instanceof Array){
  2. for(var i=0,j=obj.length;i<j;i++){
  3. var temp=fn.call(obj[i],i+1);
  4. if(temp===false){ //===值和类型都要等,==只是值相同null==false
  5. return;
  6. }
  7. }
  8. }

同理,遍历对象

  1. else if(obj instanceof Object){
  2. for(var e in obj){
  3. fn.call(obj[e],obj[e],e); //第一个参数v(对象值),第二个n(对象索引)
  4. }
  5. }

注:obj instanceof Object要在obj instanceof Array之后,因为数组属于对象,Object在前面的话,后面的判断就不执行了

二、实现一个叫Man的类,包含attr, words, say三个方法。

  1. var Man;
  2. //+++++++++++答题区域+++++++++++
  3. //+++++++++++答题结束+++++++++++
  4. try{
  5. var me = Man({ fullname: "小红" });
  6. var she = new Man({ fullname: "小红" });
  7. console.group();
  8. console.info("我的名字是:" + me.attr("fullname") + "\n我的性别是:" + me.attr("gender"));
  9. console.groupEnd();
  10. /*------[执行结果]------
  11. 我的名字是:小红
  12. 我的性别是:<用户未输入>
  13. ------------------*/
  14. me.attr("fullname", "小明");
  15. me.attr("gender", "男");
  16. me.fullname = "废柴";
  17. me.gender = "人妖";
  18. she.attr("gender", "女");
  19. console.group();
  20. console.info("我的名字是:" + me.attr("fullname") + "\n我的性别是:" + me.attr("gender"));
  21. console.groupEnd();
  22. /*------[执行结果]------
  23. 我的名字是:小明
  24. 我的性别是:男
  25. ------------------*/
  26. console.group();
  27. console.info("我的名字是:" + she.attr("fullname") + "\n我的性别是:" + she.attr("gender"));
  28. console.groupEnd();
  29. /*------[执行结果]------
  30. 我的名字是:小红
  31. 我的性别是:女
  32. ------------------*/
  33. me.attr({
  34. "words-limit": 3,
  35. "words-emote": "微笑"
  36. });
  37. me.words("我喜欢看视频。");
  38. me.words("我们的办公室太漂亮了。");
  39. me.words("视频里美女真多!");
  40. me.words("我平时都看优酷!");
  41. console.group();
  42. console.log(me.say());
  43. /*------[执行结果]------
  44. 小明微笑:"我喜欢看视频。我们的办公室太漂亮了。视频里美女真多!"
  45. ------------------*/
  46. me.attr({
  47. "words-limit": 2,
  48. "words-emote": "喊"
  49. });
  50. console.log(me.say());
  51. console.groupEnd();
  52. /*------[执行结果]------
  53. 小明喊:"我喜欢看视频。我们的办公室太漂亮了。"
  54. ------------------*/
  55. }catch(e){
  56. console.error("执行出错,错误信息: " + e);
  57. }

思路分析:

1.先来一个构造函数

  1. Man=function(info){
  2. };

2.

  1. var me = Man({ fullname: "小红" });
  2. var she = new Man({ fullname: "小红" });

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript中json操作技巧总结》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

人气教程排行