JS搜狐面試題分析
本文實(shí)例講述了幾道JS搜狐面試題。分享給大家供大家參考,具體如下:
一、實(shí)現(xiàn)一個(gè)遍歷數(shù)組或?qū)ο罄锼谐蓡T的迭代器。
var each = function(obj, fn){ //+++++++++++答題區(qū)域+++++++++++ //+++++++++++答題結(jié)束+++++++++++ }; 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(); /*------[執(zhí)行結(jié)果]------ 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(); /*------[執(zhí)行結(jié)果]------ a: "4" c: "6" ------------------*/ }catch(e){ console.error("執(zhí)行出錯(cuò),錯(cuò)誤信息: " + e); }
【思路分析】
1.首先判斷傳進(jìn)來(lái)的是數(shù)組還是對(duì)象,用到instanceof,typeof和instanceof都可以用來(lái)判斷js變量類型,用法區(qū)別
typeof(obj) //typeof會(huì)返回一個(gè)基本數(shù)據(jù)類型
obj instanceof Array //instanceof一般是用來(lái)驗(yàn)證一個(gè)對(duì)象是否屬于某類
注:typeof遇到null,數(shù)組,對(duì)象都會(huì)返回object類型
var each = function(obj, fn){ if(obj instanceof Array){ } else if(obj instanceof Object){ } };
2.遍歷數(shù)組和遍歷對(duì)象的區(qū)別
遍歷數(shù)組:
for(var i=0,j=array.length;i<j;i++){ alert(array[i]); }
遍歷對(duì)象:
for(var e in data){ alert(data[e]); }
3.分析結(jié)果
each(data1, function(o){ if( 6 == this ) return true; //表示跳過(guò)并繼續(xù)遍歷 else if( 8 == this ) return false; //表示停止遍歷 console.log(o + ": \"" + this + "\""); });
如果直接for循環(huán),那會(huì)輸出數(shù)組所有元素,現(xiàn)在有個(gè)each函數(shù),應(yīng)該讓他指向obj中的元素(即改變this指向,讓this代表obj[i])
fn.call(obj[i],i+1); //fn是each的第二個(gè)參數(shù),讓這個(gè)函數(shù)指向obj中的元素,第一個(gè)參數(shù)o,讓讓它傳值i+1
僅僅這樣會(huì)輸出4,5,7,8,9,10,11,12,所以還需要限定讓它等于8的時(shí)候跳出整個(gè)循環(huán)
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; } } }
同理,遍歷對(duì)象
else if(obj instanceof Object){ for(var e in obj){ fn.call(obj[e],obj[e],e); //第一個(gè)參數(shù)v(對(duì)象值),第二個(gè)n(對(duì)象索引) } }
注:obj instanceof Object要在obj instanceof Array之后,因?yàn)閿?shù)組屬于對(duì)象,Object在前面的話,后面的判斷就不執(zhí)行了
二、實(shí)現(xiàn)一個(gè)叫Man的類,包含attr, words, say三個(gè)方法。
var Man; //+++++++++++答題區(qū)域+++++++++++ //+++++++++++答題結(jié)束+++++++++++ try{ var me = Man({ fullname: "小紅" }); var she = new Man({ fullname: "小紅" }); console.group(); console.info("我的名字是:" + me.attr("fullname") + "\n我的性別是:" + me.attr("gender")); console.groupEnd(); /*------[執(zhí)行結(jié)果]------ 我的名字是:小紅 我的性別是:<用戶未輸入> ------------------*/ 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(); /*------[執(zhí)行結(jié)果]------ 我的名字是:小明 我的性別是:男 ------------------*/ console.group(); console.info("我的名字是:" + she.attr("fullname") + "\n我的性別是:" + she.attr("gender")); console.groupEnd(); /*------[執(zhí)行結(jié)果]------ 我的名字是:小紅 我的性別是:女 ------------------*/ me.attr({ "words-limit": 3, "words-emote": "微笑" }); me.words("我喜歡看視頻。"); me.words("我們的辦公室太漂亮了。"); me.words("視頻里美女真多!"); me.words("我平時(shí)都看優(yōu)酷!"); console.group(); console.log(me.say()); /*------[執(zhí)行結(jié)果]------ 小明微笑:"我喜歡看視頻。我們的辦公室太漂亮了。視頻里美女真多!" ------------------*/ me.attr({ "words-limit": 2, "words-emote": "喊" }); console.log(me.say()); console.groupEnd(); /*------[執(zhí)行結(jié)果]------ 小明喊:"我喜歡看視頻。我們的辦公室太漂亮了。" ------------------*/ }catch(e){ console.error("執(zhí)行出錯(cuò),錯(cuò)誤信息: " + e); }
思路分析:
1.先來(lái)一個(gè)構(gòu)造函數(shù)
Man=function(info){ };
2.
var me = Man({ fullname: "小紅" }); var she = new Man({ fullname: "小紅" });
更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript中json操作技巧總結(jié)》、《JavaScript切換特效與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
- 詳解JS中的this、apply、call、bind(經(jīng)典面試題)
- 關(guān)于javascript作用域的常見(jiàn)面試題分享
- 10道典型的JavaScript面試題
- 80%應(yīng)聘者都不及格的JS面試題
- Javascript前端經(jīng)典的面試題及答案
- 一道面試題引發(fā)的對(duì)javascript類型轉(zhuǎn)換的思考
- JavaScript中最常見(jiàn)的三個(gè)面試題解析
- JavaScript面試題(指針、帽子和女朋友)
- 關(guān)于js原型的面試題講解
- JavaScript面試題大全(推薦)
- AngularJS 面試題集錦
- js前端面試題及答案整理(一)
- 14 個(gè)折磨人的 JavaScript 面試題
- JS面試題---關(guān)于算法臺(tái)階的問(wèn)題
- 一道優(yōu)雅面試題分析js中fn()和return fn()的區(qū)別
- 一道關(guān)于JavaScript變量作用域的面試題
- 一道常被人輕視的web前端常見(jiàn)面試題(JS)
- 最新Javascript程序員面試試題和解題方法
相關(guān)文章
jQuery實(shí)現(xiàn)騰訊信用界面(自制刻度尺)樣式
這篇文章主要介紹了jQuery實(shí)現(xiàn)騰訊信用界面(自制刻度尺)樣式,下文還總結(jié)了關(guān)于jquery中extend的方法,需要的朋友可以參考下2017-08-08javascript中的parseInt和parseFloat區(qū)別
這篇文章用簡(jiǎn)單的小例子演示了parseInt和parseFloat區(qū)別,有需要的朋友可以參考一下2013-07-07