前端开发--面试题整理(JS篇)
1.截取字符串abcdace的ace
alert('abcdace'.substring(4));
2.规避javascript多人开发函数重名问题
命名空间
封闭空间
js模块化mvc(数据层、表现层、控制层)
seajs
变量转换成对象的属性
对象化
3.javascript面向对象中继承实现
function person(name){
this.name = name;
}
person.prototype.showname = function(){
alert(this.name);
}
function worker(name, job){
person.apply(this,arguments)
this.job = job;
}
for(var i in person.prototype){
worker.prototype = person.prototype;
}
new worker('sl', 'coders').showname();
4.判断一个字符串中出现次数最多的字符,统计这个次数
var str = 'asdfssaaasasasasaa';
var json = {};
for (var i = 0; i < str.length; i++) {
if(!json[str.charat(i)]){
json[str.charat(i)] = 1;
}else{
json[str.charat(i)]++;
}
};
var imax = 0;
var iindex = '';
for(var i in json){
if(json[i]>imax){
imax = json[i];
iindex = i;
}
}
alert('出现次数最多的是:'+iindex+'出现'+imax+'次');
5.编写一个方法 求一个字符串的字节长度;
//假设一个中文占两个字节
var str = '22两是';
alert(getstrlen(str))
function getstrlen(str){
var json = {len:0};
var re = /[\u4e00-\u9fa5]/;
for (var i = 0; i < str.length; i++) {
if(re.test(str.charat(i))){
json['len']++;
}
};
return json['len']+str.length;
}
6.编写一个方法 去掉一个数组的重复元素
var arr = [1,2,3,1,43,12,12,1];
var json = {};
var arr2 = [];
for (var i = 0; i < arr.length; i++) {
if(!json[arr[i]]){
json[arr[i]] = true;
}else{
json[arr[i]] = false;
}
if(json[arr[i]]){
arr2.push(arr[i]);
}
};
for (var i = 0; i < arr.length; i++) {
if(!aa(arr[i], arr2)){
arr2.push(arr[i])
}
};
function aa(obj, arr){
for (var i = 0; i < arr.length; i++) {
if(arr[i] == obj) return true;
else return false;
};
}
alert(arr2)
7.写出3个使用this的典型应用
事件: 如onclick this->发生事件的对象
构造函数 this->new 出来的object
call/apply 改变this
8.如何深度克隆
var arr = [1,2,43];
var json = {a:6,b:4,c:[1,2,3]};
var str = 'sdfsdf';
var json2 = clone(json);
alert(json['c'])
function clone(obj){
var onew = new obj.constructor(obj.valueof());
if(obj.constructor == object){
for(var i in obj){
onew[i] = obj[i];
if(typeof(onew[i]) == 'object'){
clone(onew[i]);
}
}
}
return onew;
}
9.javascript中如何检测一个变量是一个string类型?请写出函数实现
typeof(obj) == 'string'
obj.constructor == string;
10.网页中实现一个计算当年还剩多少时间的倒数计时程序,要求网页上实时动态显示“××年还剩××天××时××分××秒”
var odate = new date();
var oyear = odate.getfullyear();
var onewdate = new date();
onewdate.setfullyear(oyear, 11, 31, 23, 59, 59);
var itime = onewdate.gettime()-odate.gettime();
var is = itime/1000;
var im = onewdate.getmonth()-odate.getmonth();
var idate =is
11. 请解释一下什么是语义化的html。
内容使用特定标签,通过标签就能大概了解整体页面的布局分布
12. 为什么利用多个域名来存储网站资源会更有效?
确保用户在不同地区能用最快的速度打开网站,其中某个域名崩溃用户也能通过其他郁闷访问网站
13.请说出三种减低页面加载时间的方法
1、压缩css、js文件
2、合并js、css文件,减少http请求
3、外部js、css文件放在最底下
4、减少dom操作,尽可能用变量替代不必要的dom操作
14.什么是fouc?你如何来避免fouc?
由于css引入使用了@import 或者存在多个style标签以及css文件在页面底部引入使得css文件加载在html之后导致页面闪烁、花屏
用link加载css文件,放在head标签里面
15.文档类型的作用是什么?你知道多少种文档类型?
影响浏览器对html代码的编译渲染
html2.0
xhtml
html5
16.浏览器标准模式和怪异模式之间的区别是什么?
盒模型解释不同
17.闭包
子函数能被外部调用到,则该作用连上的所有变量都会被保存下来。
18.请解释什么是javascript的模块模式,并举出实用实例。
js模块化mvc(数据层、表现层、控制层)
seajs
命名空间
19.你如何组织自己的代码?是使用模块模式,还是使用经典继承的方法?
对内:模块模式
对外:继承
20.你如何优化自己的代码?
代码重用
避免全局变量(命名空间,封闭空间,模块化mvc..)
拆分函数避免函数过于臃肿
注释
21.你能解释一下javascript中的继承是如何工作的吗?
子构造函数中执行父构造函数,并用call\apply改变this
克隆父构造函数原型上的方法
22.请尽可能详尽的解释ajax的工作原理。
创建ajax对象(xmlhttprequest/activexobject(microsoft.xmlhttp))
判断数据传输方式(get/post)
打开链接 open()
发送 send()
当ajax对象完成第四步(onreadystatechange)数据接收完成,判断http响应状态(status)200-300之间或者304(缓存)执行回调函数
上一篇: 肠炎喝什么好?教你如何佛系治疗它
下一篇: 开发--CentOS-7安装及配置