当前位置: IT培训 > HTML5培训 > 前端开发 > HTML5面试题 > 58同城web前端经典面试题推荐 有需要的速度来取
58同城web前端经典面试题推荐 有需要的速度来取 时间:2017-12-11     来源:58同城web前端面试题汇总

今年58同城的题目出的不深,大多是考点基本概念,范围比较广。有一点值得注意的是,58的笔试不支持在线编译,代码靠手写。所以平时练习的时候要多重视手写代码的能力,因为编辑器编写和手写还是有很大区别的,面试也有很大概率让你手写代码。

58同城web前端面试题

1.编程题

实现对象的深复制deepclone函数。

//利用 递归 来实现深复制,对属性中所有引用类型的值,遍历到是基本类型的值为止。

function deepclone(src){

if(!src && typeof src !== 'object'){

return;

}

var dst = src.constructor === Array ? []:{};

for(key in src){

if(src.hasOwnProperty(key)){

if(src[key] && typeof src[key] === 'object'){

dst[key] = src[key].constructor === Array ? []:{};

dst[key] = deepclone(src[key]);

}else{

dst[key] = src[key];

}

}

}

return dst;

}

var a = {

name : 'orange',

age : '24',

arr : [1,2,3,{a:2, b:'hello'},[4,5]],

clone: function(){

console.log('helloworld');

}

}

a.clone(); //helloworld

console.log(typeof a.clone); //function

console.log(deepclone(a));

// { name: 'orange',

// age: '24',

// arr: [ 1, 2, 3, { a: 2, b: 'hello' }, [ 4, 5 ] ],

// clone: [Function: clone] }

2.应用题

(1)判断一个字符串是不是回文串

//判断是否是回文串

function isPalindrome(str) {

str = str.replace(/\W/g, '').toLowerCase();

return (str == str.split('').reverse().join(''));

}

(2)定义一个含10个随机数的数组,并去重

var arr = [];

for(var i=0; i<100; i++){

var num = parseInt(Math.random()*100);

arr[i] = num;

}

function unique(arr){

var newArr = [];

for(var i=0; i

if(newArr.indexOf(arr[i]) == -1){

newArr.push(arr[i]);

}

}

return newArr;

}

console.log(arr);

console.log(unique(arr));

3.问答题

(1)prototype和_proto_的原理和区别

_proto_是每个对象都有的一个属性,而prototype是函数才会有的属性。

在JS里,万物皆对象。方法(Function)是对象,方法的原型(Function.prototype)是对象。因此,它们都会具有对象共有的特点。

对象具有属性__proto__,可称为隐式原型,一个对象的隐式原型指向构造该对象的构造函数的原型,这也保证了实例能够访问在构造函数原型中定义的属性和方法。

方法这个特殊的对象,除了和其他对象一样有上述_proto_属性之外,还有自己特有的属性——原型属性(prototype),这个属性是一个指针,指向一个对象,这个对象的用途就是包含所有实例共享的属性和方法(我们把这个对象叫做原型对象)。原型对象也有一个属性,叫做constructor,这个属性包含了一个指针,指回原构造函数。

总结:

1.对象有属性__proto__,指向该对象的构造函数的原型对象。

2.方法除了有属性__proto__,还有属性prototype,prototype指向该方法的原型对象。

(2)事件捕获和冒泡应该如何管理?怎么阻止?

addEventListener false:事件冒泡 true:事件捕获

//阻止事件冒泡

function stopBubble(event){

if(window.event){//兼容IE

window.event.cancelBubble=true;

}else{

event.stopPropagation();

}

}

//阻止默认事件

function stopDefaultEvent(event){

if(window.event){//兼容IE

window.event.returnValue=false;

}else{

event.preventDefault()

}

return false;

}

(3)闭包的原理和应用

当函数可以记住并访问所在的词法作用域时就产生了闭包,即使函数是在当前词法作用域之外执行。

//手写一个闭包

function outer(){

var a = 2;

function inner(){

console.log(a);

}

return inner;

}

var result = outer();//result引用内部函数outer

result(); //2

闭包的特点:函数嵌套函数、内部函数可以引用外部函数的参数和变量(词法作用域)、参数和变量不会被垃圾回收机制收回

好处:希望一个变量长期驻扎在内存中、避免全局变量的污染、私有成员的存在

应用:闭包通常用来创建内部变量,使得这些变量不能被外部随意修改,同时又可以通过指定的函数接口来操作。 代码封装、模块化。

4.填空题

(1)3+true = 4

(2)http协议的前端缓存的四种方法

(3)Node.js的核心模块 nodejs常用核心模块介绍

HTTP模块:处理客户端的网络请求

URL模块:处理客户端请求过来的URL

Query Strings模块:处理客户端通过`get/post`请求传递过来的参数

File System模块:在服务端来操作文件,可能是需要将浏览器上传的图片保存到服务器,也可能是需要将服务器的资源读取之后返回给浏览器

Path模块:操作文件的路径,为文件操作服务

Global模块:全局共享的,不需要导入模块即可以使用

(4)html5的本地存储 cookie、localStorage、sessionStorage

(5)写出四种设计模式 工厂模式、单例模式、观察者模式、原型模式 设计模式

(6)css中的单位 rem和em分别相对于什么?

px像素(Pixel)。相对长度单位。像素px是相对于显示器屏幕分辨率而言的。

em是相对长度单位。相对于当前对象内文本的字体尺寸。如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。

rem为元素设定字体大小时,仍然是相对大小,但相对的只是HTML根元素。