近期在找工做,也在读 前端面试江湖 这本书,书中整理了不少基础的面试题目,在书中也发现了一些错误。
好记性不如烂笔头,因而整理下对本身有益的题目,都是一些较为基础的题目,后期还会更新。时时刻刻勉励本身,注重基础。
如今在找工做,初中级前端,若有哪位热心的仁兄公司在招前端,但愿@我一下,目标广州,前端路很长,但愿一块儿努力向前。css
截取字符串 var a = "www.qdjhu.com中的qdjhu"。html
a.substr(4,5)或者a.slice(4,9)
判断字符串是不是这样组成的,第一个必须是字母,后面的可使字母,数字,下划线,总长度为5-20。前端
var a = /^[a-zA-Z]{1}\w{4,19}/
给定一个字符串 "IamWangZhiJun",要求查找里面的字符串Wang。vue
考查知识点,对String对象的操做,indexOf()方法表示查找一个字符串在另外一个字符串中的位置,返回一个整数,字符串匹配开始的位置。java
var a ="IamWangZhiJun" var b ="Wang" var c =a.indexOf(b) //3 var d = a.substr(c,b.length)
如何实现一个删除字符串左边为空白字符的方法。node
知识点2,量词符和贪婪模式,?表示0次或者1次{0,1},*表示0次或者屡次{0,},+表示1次或者屡次{1,}。默认状况下匹配贪婪模式。ios
function leftTrim(str){ return str.replace(/^\s*/,"") }; var a = leftTrim(" abc")//abc
JavaScript 的typeof 都返回那些数据类型。css3
请定义一个函数,实现字符串的反转。web
知识点,主要是把字符串从末尾开始的每个元素截取后,在从新组成一个新字符串,用到的方法charAt(), 返回指定位置的字符,注意是从0开始。面试
function reverStr(str){ var temStr = ""; for(var i = str.length-1:i>=0:i—-){ temStr+=str.charAt(i)} } returun temStr; }
7. 字符串的操做主要有那些。 * 查找类型 * indexOf(),返回匹配开始的位置。 * search(),返回匹配的第一个位置。 * match(),返回一个数组,成员为匹配的字符串。 * length(),返回字符串的长度 * 截取,拼接,替换类 * slice(),从原字符串中取回字符串并返回,第一个参数为起始位置,第二个参数为结束位置。 * substr(),从原字符串中取回字符串并返回,第一个参数是子字符串的开始位置,第二个参数是子字符串的长度。 * concat(),方法用于链接两个字符串,返回一个新字符串,不改变原字符串。 * replace(),第一个参数为被替换的内容,第二个参数为要替换的内容,通常只匹配一个。 * charAt()方法返回指定位置的字符,参数是从0开始编号的位置。 * trim() * 转换类 * split(),第一个参数为起始位置 第二个参数为限定放回数组的成员数,注意,第一个参数若是为空,则返回数组的成员是原字符串的每个字符。此方法会将字符串装换为数组。 8. 有一个字符串 abcd-ef-ghi,请用js把它处理成ghi&ed&abcd。 * 知识点,字符串和数组之间的装换。
var a ="abcd-ef-ghi"; var b = a.split("-"); var result = b.reverse().join("&") ```
请编写代码拓展JavaScript中string对象,让其有一个方法删除字符串中全部英文句号"."。
String.prototype.killPoint = function(){ return this.replace(/^\./g,""); }
将字符串"wang zhi j un"中由空格分割的每一个单词首字母大小写。
function str(words) { words = words.split(" "); for(var i = 0;i<words.length;i++){ words[i] = words[i].charAt(0).toUpperCase + words[i].slice(1); } return words; } var words = "wang zhi j un"; str(words);
JS如何检测变量是一个string类型?请写出函数实现。
function isString(str){ if(typeof(str) === "string" || str.constructor === String){ return true; }else{ return false; } } var str = "hello world"
请说明javaScript中的nodeName,nodeVaule,nodeType的区别
* nodeName 表示节点的名称 * 元素节点的nodeName是标签名称 * 属性节点的nodeName是属性名称 * 文本节点的nodeName是#text * 文档节点的nodeName是#document * nodeVaule 表示文本内容 * 对于文本节点,nodeVaule属性包含文本 * 对于属性节点,nodeValue属性包含属性值 * nodeType 属性返回节点的类型,经常使用的以下 * 元素类型对应的节点类型为1 * 属性类型对应的节点类型为2 * 文本属性对应的节点类型为3
下列代码执行后,结果是什么
for(i=0,j=0;i<6,j<10;i++,j++){ var k =i+j } alert(k) //18 for(i=0,j=0;i<10,j<6;i++,j++){ var k =i+j } alert(k) //10
统计从1-400之间的天然对数中含有多少个1?
var count = 0; for(var i=0;i<=400;i++){ for(var j=0;j<=i.toString().length;j++){ if(i.toString()[j]=="1"){ count++} } } alert(count)
js中基本数据类型有哪些?本地对象,内置对象,宿主对象有那些?
基本数据类型
string,boolean,number,null,undefined,object。
Object,Function,String,Number,Boolean,Data,Array,RegExp。
内置对象
宿主对象
全部BOM,DOM都是宿主对象
其中BOM经常使用对象有
编写一个函数,参数为一个元素,返回指定元素的第一个元素,函数越简单越好
function getFirst(el){ var nodes = el.children; return nodes.length!=0?nodes[0]:null; }
简述JavaScript中this的理解。
一下讨论this的四种用法
纯粹的函数调用,说明此时this表明全局对象。
var x = 1; function test(){ this.x = 0;//这里等同于x = 0;已改写 } test();//window.test() alert(x);//0
做为对象方法的调用,说明此时this指向这个的上级对象。
function test(){ alert(this.x); } var o = {}; o.x=1; o.m = test; o.m()//1
做为构造函数的调用,说明此时this是指向新对象,不是全局对象!!!
var x = 2; function test(){ this.x = 1; } var o = new test(); alert(o.x)//1 alert(x)//2
apply调用
var x = 0; function test(){ alert(this.x)} var o = {}; o.x = 1; o.m = test; o.m.apply()//0,当参数为空的时候,默认调用全局 o.m.apply(o)//1
什么是闭包?闭包的特性?对页面有什么影响?好处和坏处?请写出一个闭包的简单实例?
闭包特性
好处和坏处
实例
function a(){ var i = 0; function b(){ console.log(++i) // i=null 解决内存泄漏 } return b; } var c = a();//执行a函数 c()//执行b函数,也就是执行闭包,结果为1 c()//2 …
IE和Firefox处理兼容。
绑定事件监听
function addEvent(elem,eventName,handler){ if(elem.attachEvent){ elem.attachEvent("on"+eventName,handler) }else if{ elem.addEventListener(eventName,handler,false)} }else{ elem["on"+eventName] } function removeEvent(elem,eventName,handler){ if(elem.detachEvent){ elem.detachEvent("on"+eventName,handler) }else if{ elem.removeEventListener(eventName,handler,false) }else{ elem["on"+eventName] } }
获取到event对象
function getEvent(e){ return e ? e : windowm.event; } function getTarget(e){ return e.target||e.srcElement } //阻止默认和冒泡 function prevent(e){ if(e.prevent){ e.preventDefault(); }else{ e.returnValue = false } } function stop(e){ if(e.stopPropagation){ e.stopPropagation(); }else{ e.cancelBubble()} }
将$(".red").attr("sth",4)装换成Js实现
知识点,获得的是数组,要遍历。
var a = document.getElementsByClassName("red"); for(var i =0;i<a.length;i++){
}
6. 做用域问题
var a = {n:1};
var b =a;
a.x=a={n:2};//a.x={n:2};a={n:2}
console.log(a.x);//undefined
console.log(b.x);//{n:2}
理解,首先 `var a = {n:1}` a这里指向一个对象,`var b =a ` 则是将b也指 向这个对象,第三行代码,实际是已经不共享对象了,a已经改写了,而b.x里面则添 加了x = {n:2},故有上结果。 7. Boolean对象和Boolean值
var x = new Boolean(false);
if (x) {
alert('hi');
}
var y = Boolean(0);
if (y) {
alert('hello');
}
//alert("hi"),undefined
8.什么是跨域?跨域的几种实现方法? * 跨域是经过js在不一样域进行数据传输或者通讯,当端口号,协议,域名 不一样的状况下,使用ajax是拿不到数据的。 * 解决方法 * 使用window.name进行跨域, a.html页面,好比说域名是www.abc.com/a.html;这里须要注意的是 数据只能是字符串形式。
<script>window.name = "我是a.html页面的数据,我是跨域请求的数据"</script> ``` b.html页面,好比说www.baidu.com/b.html ``` <iframe id="proxy" src="www.abc.com/a.html" style="display:none" onload="getdata()"></iframe> <script> var iframe = document.getElementById("proxy"); function getdata(){ iframe.onload = function (){ var data = iframe.contentWindow.name; alert(data); } iframe.src = "about:blank"; } </script> ```
9.判断当前浏览器的类型
var useAgent = window.navigator.useAgent; if(useAgent.indexOf("Chorme")){ alert("是Chorme浏览器") }; if(useAgent.indexOf("Safari")){ alert("是Safari浏览器") }; if(useAgent.indexOf("Firefox")){ alert("是Firefox浏览器") };
主要涉及的知识点 是考察window对象下的navgator对象的useAgent属性,获得是字符串,返回最字符串进行操做。
CSS3新特性有哪些?请作说明。很多于5条
选择器类(稍微特别一点的)
* first-child * last-child * nth-child * :cheecked
文字样式
@font-face
@font-face{ font-family:BorderWeb; src:url(BorderWeb.eot) } .border{ font-family:"BorderWeb" }
text-overflow & white-space & word-warp
.ellipsis{text-overflow:ellipsis; overflow:hidden; white-space:nowrap; width:200px; background:#ccc;}
渐变,
线性渐变.
第一个参数为方位,能够是对角,如left to。也能够是角度,注意这里是顺时钟,如180deg就是从下到上
径向渐变.
布局
动画,过渡
* transition * transform * animation
HTML有哪些新特性?
新增标签
<header>
<footer>
<nav>
<section>
<artical>
<aside>
<figure> <figcaption>
<details>
3.localStorage,sessionStorage,cookie 的区别
4.如何触发页面的回流reflow,重绘repaint,解释下它们的基本原理
原理解析
减小性能影响的方法
1. 减小对DOM的操做,如 查询时候将值赋值给局部变量,减小循环对DOM的操做。 2. 使用JSON格式来进行数据交换
5.transition的局限性
6.如何优化页面速度,提升页面响应。
<head>
里面,js放在尾部7.如何提升前端性能
8.如何对网站的文件和资源进行优化
9.请简单说明浮动和绝对定位的区别和应用。
10.说说移动端的兼容和常见问题解决方案(整理了本身用过的)
1. meta 元标签基础知识 * 将窗口调整为设备窗口,并禁止用户缩放 ``` <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no" ``` * 忽略页面中的数字识别为电话号码,Android平台对邮箱的识别 ``` <meta name="format-detection",content="telephone=no"> ``` ``` <meta name="format-detection",content="email=no"> ``` * 当网站添加到主屏幕快速启动方式,以及顶部导航条样式 ``` <meta name="apple-mobile-wep-app-capable",content="yes"> ``` ``` <meta name="apple-mobile-web-app-status-bar-sytle",content="black"> ``` 2. 移动端字体 * 中文使用默认字体,英文用Helvetica 3. 触摸事件的响应顺序 ``` 一、ontouchstart 二、ontouchmove 三、ontouchend 四、onclick ``` 4. Retina屏幕下问题解决 * 移动端的视觉稿一般会设计为传统PC的2倍,一般把设计稿乘以2/1获得实际书写时候打大小 * 图片则设置为 实际宽高的50%,如 background-position:50% 50%; 5. IOS系统下被触摸的时候有半透明遮罩 ``` a,button,input,textarea{-webkit-tap-heightlight-color:rgb(0,0,0,0);} ``` 6. webkit表单元素的默认外观怎么重置 ``` .css{-webkit-appearance:none;} ``` 7. 打电话,发邮件 ``` <a href="tel:020-62682400">打电话给020-62682400</a> ``` ``` <a href="email:13249791010@163.com">13249791010@163.com</a> ``` 8. 移动端模拟hover效果,添加ontouchstart,ontouchend事件 ``` var btnBlue = document.querySelector(".btn-blue"); btnBlue.ontouchstart = function(){ this.className = "btn-blue btn-blue-on"
}
btnBlue.ontouchend = function(){ this.className = "btn-blue"
}
9. ios下禁止调整字体大小
body{-webkit-text-size-adjust:100%} ``` 10. ios下输入框取消大写 ```
<input autocapitalize="off" autocorrect="off">
11. css3动画尽量地使用合成属性transform和opacity来设计CSS3动画,不使用position的left和top来定位,用translate3D开启加速 11.说说移动端2栏布局,左侧定宽,右侧自适应的几种方法 * HTML代码
<div class="main"> <div class="left">左侧固定</div> <div class="right">右侧自适应<div> </div> ```
第一种方法,浮动+定位(等高布局)
.main{ position:relative; padding-left:100px; display:inline-block; } .left{ position:relative; float:left; width:100px; margin-left:-100px; } .right{ float:left;
} .right,.left{ height:200px; min-height:200px; height:auto !important; } ```
第二种,浮动(等高布局)
.main{ overflow:hidden; } .left{ float:left; width:100px; padding-bottom:9999px; margin-bottom:9999px; } .right{ margin-left:100px; padding-bottom:9999px; margin-bottom:9999px; } .right,.left{ height:200px; min-height:200px; height:auto !important; }
第三种方法,定位+margin
.left{ position:absolute; top:0; left:0; width:100px; height:400px; } .right{ margin-left:100px; height:400px; }
第四种方法,定位
.left{ position:absolute; top:0; left:0; width:100px; height:400px; } .right{ position:absolute; top:0; left:100px; height:400px; }
第五种方法,flex
.main{ display:flex; } .left{ width:100px; height:400px; } .right{ flex:1; height:400px; }
第六种方法 table
.main{ display:table; width:100%; } .left{ display:table-cell width:100px; height:400px; } .right{ display:table-cell }
12.websocket是什么?和http有什么关联(只是基于本身的理解,暂无相关项目经验)
分离的好处
要不要先后端分离,分为三点。
轻前端页面
重前端页面
先后端均衡