JavaScript面试题
来源:互联网 发布:河南人 知乎 编辑:程序博客网 时间:2024/04/30 05:58
题目1:
实现一个遍历数组或对象里所有成员的迭代器。
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);
题目2:
实现一个叫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);
}
}
题目3:
实现一个URI解析方法,把url里#之后的参数解析成指定的数据结构。
function urlParser(s){
//+++++++++++答题区域+++++++++++
//+++++++++++答题结束+++++++++++
}
try{
var url1 = "http://www.abc.com/m/s/#page/2/?type=latest_videos&page_size=20";
var url2 = "http://www.abc.com/m/s/#type=latest_videos&page_size=20";
var url3 = "http://www.abc.com/m/s/#page?type=latest_videos&page_size=20";
console.group();
console.info( urlParser(url1) );
console.info( urlParser(url2) );
console.info( urlParser(url3) );
console.groupEnd();
/*------[执行结果]------
["page", "2", { "type": "latest_videos", "page_size": 20 }]
[{ "type": "latest_videos", "page_size": 20 }]
["page", { "type": "latest_videos", "page_size": 20 }]
------------------*/
}catch(e){
console.error("执行出错,错误信息: " + e);
}
网上参考答案:
/* 第一题 */
var each = function(obj, fn){
var len = obj.length,i = 0;
if( typeof(len) == 'undefined' ){
//如果是对象 ps:对象没有length属性
for( i in obj ){
fn.call(obj[i], obj[i], i);
}
}
else{
//如果是数组
for(; i<len; i++){
if ( false === fn.call(obj[i],i+1) ){
break;
}
}
}
};
/* 第二题 */
var Man;
//+++++++++++答题区域+++++++++++
Man = function( obj ){
return new Man.fn.init( obj );
}
Man.fn = Man.prototype = {
init:function( obj ){
this.info = {
fullname:'',
gender:'',
word:[],
'words-limit':0,
'words-emote':''
}
for(var i in obj ){
this.info[i] = obj[i];
}
return this;
},
attr:function( name, value ){
if( typeof(name) == 'object'){
for(var i in name ){
this.info[i] = name[i];
}
}
else if( value ){
this.info[name] = value;
}
else{
return this.info[name] || '<用户未输入>';
}
},
words:function( value ){
this.info['word'].push(value);
},
say:function(){
var inf = this.info, n = 0, str = '';
while( n < inf['words-limit'] ){
str += inf['word'][n],n++;
}
return inf['fullname'] + inf['words-emote'] + ":\"" + str + "\"";
}
}
Man.fn.init.prototype = Man.prototype;
/* 第三题 */
function urlParser(s){
var re = [],a,i,t,o={},reg = /([\w]+)(\/?|=)([\w]+)/g;
a = (s.split('#')[1] || '').match( reg );
for(i=0; i<a.length; i++){
if( a[i].indexOf('=') == -1 ){
if( a[i].indexOf('/') == -1 ){
re.push(a[i]);
}else{
t = a[i].split('/');
re.push(t[0],t[1]);
}
}
else if( a[i].indexOf('=') >= 0 ){
t = a[i].split('=');
o[t[0]] = t[1];
}
}
re.push(o);
return re;
}
- 一道javascript面试题
- javascript面试题汇总
- CSS+JavaScript面试题
- CSS+JavaScript面试题
- javascript 面试题
- javascript面试题
- javaScript面试题大全
- JavaScript面试题
- javaScript面试题1
- javascript 面试题
- JavaScript面试题
- javaScript面试题
- javascript面试题-1
- javaScript面试题
- javascript面试题
- javaScript面试题大全
- JavaScript常见面试题
- javaScript面试题大全
- 用汇编的眼光看C++(之嵌入汇编) ,(之特殊函数)
- hduoj2042,不容易系列之二,递推水题
- linux 进程(关于守护进程、检查一个进程是否活着、如何写一个进程号文件)
- linux sed
- USACO 3.2 Stringsobits
- JavaScript面试题
- 用汇编的眼光看C++(之class构造、析构) ,(之拷贝、赋值函数)
- ok6410-第06篇-裸机led程序
- java itext html转pdf[续篇]
- linux awk
- UML ----用例图
- C#上机 第七周 任务2 判断该物体是否会在水中下沉
- Struts2基础之八:action的缺省配置和包含其他配置文件
- 用汇编的眼光看C++(之类继承) ,(之虚函数) .