近期在找工做,也在讀 前端面試江湖 這本書,書中整理了不少基礎的面試題目,在書中也發現了一些錯誤。
好記性不如爛筆頭,因而整理下對本身有益的題目,都是一些較爲基礎的題目,後期還會更新。時時刻刻勉勵本身,注重基礎。
如今在找工做,初中級前端,若有哪位熱心的仁兄公司在招前端,但願@我一下,目標廣州,前端路很長,但願一塊兒努力向前。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有什麼關聯(只是基於本身的理解,暫無相關項目經驗)
分離的好處
要不要先後端分離,分爲三點。
輕前端頁面
重前端頁面
先後端均衡