HTML5中的新標籤,舉例一下javascript
canvas繪畫,本地離線存儲localStorage,sessionStorage,video和audio元素,語義化元素,表單類型(date,time,email等),地理定位等css
CSS3新的標籤html
邊框:圓角border-radius,陰影box-shadow,邊框圖片border-image
背景:背景定位區域background-origin,背景大小支持百分比background-size
文字效果:文字陰影text-shadow,長單詞拆分word-wrap
2D轉換:transform:對元素進行移動translate(),縮放scale(),轉動rotate(),拉伸skew()
3D轉換:transform:對元素進行x軸旋轉rotateX(),y軸旋轉rotateY()
過渡,動畫, 多列等等前端
如何垂直居中一個浮動元素vue
父元素相對定位,子元素絕對定位,top:50%;left:50%。margin負的左右二分之一的height,widthjava
.content{
position: absolute;
top: 50%;
left: 50%;
width: 100px;
float: left;
height: 100px;
background-color: #ff6700;
margin-top: -50px;
margin-left: -50px;
}node
父盒子相對定位,子盒子決定定位,上下左右都爲0,margin:auto;jquery
.content{ width: 200px; height: 200px; background-color: #ff6700; float: left; margin: auto; position: absolute; left: 0; top: 0; bottom: 0; right: 0; }
nth選擇器webpack
CSS3 :nth-child() 選擇器ios
規定屬於其父元素的第二個子元素的每一個 p 的背景色:
p:nth-child(2)
{
background:#ff0000;
}
CSS外邊距(margin)重疊及防止方法
相鄰marign重疊的問題
1.1 示例:
<style> *{ margin:0; padding: 0; } .divout{ width: 100px; height: 100px; background: yellow; margin-bottom: 50px; border: 1px solid black; } .divout1{ width:50px; height: 50px; background: yellow; margin-top: 80px; /*float:left;*/ /*position:absolute;*/ border: 1px solid black; } </style> <body> <div class="divout"> </div> <div class="divout1"> </div> </body>
1.2 外邊距重疊計算方式
所有都爲正值,取最大者;
不全是正值,則都取絕對值,而後用正值的最大值減去絕對值的最大值;
沒有正值,則都取絕對值,而後用0減去最大值。
元素和父元素margin值問題
父元素無 border、padding、inline content 、 clearance時,子元素的margin-top/bottom會與父元素的margin產生重疊問題。
示例
<style> *{ margin:0; padding: 0; color: black; } #parrent{ width:300px; height:150px; margin-top: 20px; background:teal; } #box1{ width:100px; height:100px; background:aqua; margin:100px 0; }
<body> <div id="parrent"> <div id="box1"> 我是box1 </div> 我是內容 </div> </body>
2.1 解決辦法
外層元素添加padding
外層元素 overflow:hidden;
外層元素透明邊框 border:1px solid transparent;
內層元素絕對定位 postion:absolute:
內層元素 加float:left;或display:inline-block;
說一下flex彈性佈局的屬性
justify-content: //子元素水平排列的方式 center //居中 space-between //兩端對齊 space-around // 子元素拉手分佈 flex-start // 居左 flex-end //居右 align-items : // 子元素的垂直居中的排列方式 enter // 居中 flex-end //底部 flex-start //開始 align-content : //多行的時候,子元素的垂直排列方式 center //居中 flex-end //底部 flex-start //開始 flx-direction: // 排列方式row 橫向排列 row-reverse //橫向反向排列 flex-wrap : //子元素是否在一行顯示 no-wrap //不換行 wrap //換行
說你對rem的理解
px、rem和em的區別
px:相對長度單位。像素px是相對於顯示器屏幕分辨率而言的。特色:
JavaScript的數據類型
值類型(基本類型):字符串(String)、數字(Number)、布爾(Boolean)、對空(Null)、未定義(Undefined)、Symbol。
引用數據類型:對象(Object)、數組(Array)、函數(Function)。
注:Symbol 是 ES6 引入了一種新的原始數據類型,表示獨一無二的值。
深拷貝和淺拷貝的區別
1.淺拷貝: 將原對象或原數組的引用直接賦給新對象,新數組,新對象/數組只是原對象的一個引用
2.深拷貝: 建立一個新的對象和數組,將原對象的各項屬性的「值」(數組的全部元素)拷貝過來,是「值」而不是「引用」
深拷貝 JS 實現
原型和原型鏈
原型:
JavaScript 規定,每個構造函數都有一個 prototype 屬性,指向另外一個對象。咱們能夠把全部對象實例須要共享的屬性和方法直接定義在 prototype 對象上。這個對象的全部屬性和方法,都會被構造函數的所擁有。
Prototype做爲對象的內部屬性,是不能被直接訪問的,咱們通常經過__proto__這個屬性進行訪問。
在原型對象中還有一個屬性constructor,這個屬性對應建立全部指向該原型的實例的構造函數
原型對象就至關於一個公共的區域,全部同一個類的實例均可以訪問到這個原型對象,咱們能夠將對象中共有的內容,統一設置到原型對象中。
原型鏈:
在JavaScript中萬物都是對象,對象和對象之間也有關係,並非孤立存在的。對象之間的繼承關係,在JavaScript中是經過prototype對象指向父類對象,直到指向Object對象爲止,這樣就造成了一個原型指向的鏈條
當咱們訪問對象的一個屬性或方法時,它會先在對象自身中尋找,若是有則直接使用,若是沒有則會去原型對象中尋找,若是找到則直接使用。若是沒有則去原型的原型中尋找,直到找到Object對象的原型,Object對象的原型沒有原型,若是在Object原型中依然沒有找到,則返回undefined。
事件機制和事件委託
事件流的三個階段:
事件委託:
數組的去重
1、利用ES6 Set去重(ES6中最經常使用)
function unique (arr) { return Array.from(new Set(arr)) } var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}]; console.log(unique(arr)) //[1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {}, {}]
2、利用for嵌套for,而後splice去重(ES5中最經常使用)
function unique(arr){ for(var i=0; i<arr.length; i++){ for(var j=i+1; j<arr.length; j++){ if(arr[i]==arr[j]){ //第一個等同於第二個,splice方法刪除第二個 arr.splice(j,1); j--; } } } return arr; } var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}]; console.log(unique(arr)) //[1, "true", 15, false, undefined, NaN, NaN, "NaN", "a", {…}, {…}] //NaN和{}沒有去重,兩個null直接消失了
3、利用indexOf去重
function unique(arr) { if (!Array.isArray(arr)) { console.log('type error!') return } var array = []; for (var i = 0; i < arr.length; i++) { if (array .indexOf(arr[i]) === -1) { array .push(arr[i]) } } return array; } var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}]; console.log(unique(arr)) // [1, "true", true, 15, false, undefined, null, NaN, NaN, "NaN", 0, "a", {…}, {…}] //NaN、{}沒有去重
12、[...new Set(arr)]
[...new Set(arr)]
//代碼就是這麼少----(其實,嚴格來講並不算是一種,相對於第一種方法來講只是簡化了代碼)
數組怎麼拼接
var a = [1,2,3]; var b = [4,5,6];
一、concat
js的Array對象提供了一個叫concat()方法,鏈接兩個或更多的數組,並返回結果。
var c = a.concat(b);//c=[1,2,3,4,5,6]
這裏有一個問題,concat方法鏈接a、b兩個數組後,a、b兩個數組的數據不變,同時會返回一個新的數組。這樣當咱們須要進行屢次的數組合並時,會形成很大的內存浪費,因此這個方法確定不是最好的。
二、for循環
大概的思路是:遍歷其中一個數組,把該數組中的全部元素依次添加到另一個數組中。直接上代碼:
for(var i in b){ a.push(b[i]); }
這樣的寫法能夠解決第一種方案中對內存的浪費,可是會有另外一個問題:醜!這麼說不是沒有道理,若是能只用一行代碼就搞定,豈不快哉~
三、apply
函數的apply方法有一個特性,那就是func.apply(obj,argv),argv是一個數組。因此咱們能夠利用這點,直接上代碼:
a.push.apply(a,b);
調用a.push這個函數實例的apply方法,同時把,b看成參數傳入,這樣a.push這個方法就會遍歷b數組的全部元素,達到合併的效果。
這裏可能有點繞,咱們能夠把b當作[4,5,6],變成這樣:
a.push.apply(a,[4,5,6]); 而後上面的操做就等同於: a.push(4,5,6);
這樣就很清楚了!
另外,還要注意兩個小問題:
1)以上3種合併方法並無考慮過a、b兩個數組誰的長度更小。
因此好的作法是預先判斷a、b兩個數組哪一個更大,而後使用大數組合並小數組,這樣就減小了數組元素操做的次數!
2)有時候咱們不但願原數組(a、b)改變,這時就只能使用concat了。
Jquery的美圓符號$有什麼做用
jQuery中就是經過這個美圓符號來實現各類靈活的DOM元素選擇的,例如$(「#main」)即選中id爲main的元素。
Jquery中有哪幾種類型的選擇器?
從我本身的角度來說,能夠有3種類型的選擇器,以下:
一、基本選擇器:直接根據id、css類名、元素名返回匹配的dom元素。
二、層次選擇器:也叫作路徑選擇器,能夠根據路徑層次來選擇相應的DOM元素。
三、過濾選擇器:在前面的基礎上過濾相關條件,獲得匹配的dom元素。
四、請使用jQuery將頁面上的全部元素邊框設置爲2px寬的虛線?
es6的箭頭函數和普通函數有什麼區別
let f = function(v) { return v; }; let f = v => v;
promise
Promise 是異步編程的一種解決方案.簡單說就是一個容器,裏面保存着某個將來纔會結束的事件(一般是一個異步操做)的結果。從語法上說,Promise 是一個對象,能夠從改對象獲取異步操做的消息。
// 1. 建立promise實例,在實例中執行異步操做(好比發送網絡請求) // 2. 異步操做成功時,調用reslove函數傳遞數據 // 3. 異步操做失敗時,調用reject函數傳遞錯誤信息 const promise = new Promise(function(resolve, reject) { // 異步操做 if (/* 異步操做成功 */){ resolve(value); } else { reject(error); } }); // 使用promise實例then方法接收reslove或reject返回的數據 promise.then(function(value) { // 此處數據即爲reslove回來的數據 // success }, function(error) { // 此處數據即爲reject回來的數據 // failure });
字符串擴展
擴展運算符-合併數組
let arr2 = [4,5,6]; let arr3 = [...arr1,...arr2]; console.log(arr3); // [1,2,3,4,5,6]
MVVM
vue-router路由模式有幾種,原理分別是什麼?
vue-router路由庫是用哪一種技術實現的,總共有兩種,分別叫hash模式和history模式,默認是hash模式
hash模式原理:監聽hashchange事件,能夠調用window.location.hash獲取到錨點值,和路由規則進行匹配,匹配到以後將路由規則中定義的組件渲染到頁面
history模式:地址上沒有#號,更加符合URL形式;url地址不能重複打開;
history模式須要後臺進行相關配置:要在服務端增長一個覆蓋全部狀況的候選資源:若是 URL 匹配不到任何靜態資源,則應該返回同一個 index.html 頁面,這個頁面就是你 app 依賴的頁面
Vuex怎麼用,它相對與localstorage有什麼優勢和缺點
vuex的核心是:state,getter,actions,mutations
state用來定義存放公共數據
this.$store.state.msg
actionactions和mutations都是定義對數據進行操做的方法,mutations中都是同步方法,mutations中定義異步方法
this.$store.dispatch('asyncchange','我是被異步修改的數據')
區別
localstorage沒法實現雙向數據綁定,模型層的數據改變視圖中數據不會發生改變,vuex數據不能持久化,須要結合localstorage使用,比較臃腫,小型項目不建議使用
axios 是什麼?怎麼使用?描述使用它實現登陸功能的流程
axios 是請求後臺資源的模塊。 npm i axios -S
若是發送的是跨域請求,需在配置文件中 config/index.js 進行配置
vue經常使用的指令
v-text v-bind v-for v-if v-on
說一下單向數據流
組件之間的傳值,數據從父級組件傳遞給子組件,只能單向綁定。
父組件向子組件傳值
在父組件中定義數據,經過屬性綁定的形式綁定到子組件上,在子組件中定義props接收傳遞過來的變量
子組件向父組件傳值
在子組件中使用this.$emit觸發一個自定義的方法名,而後傳遞數據第一個參數就是自定義的方法名,第二個參數就是須要傳遞給父組件的數據
this.$emit('func',this.msg)
在父組件中使用子組件時,綁定一個事件,事件名稱和子組件觸發的方法名同名
<div id='app'> <son @func = 'getmsg'></son> </div>
雙向綁定和原理
v-model指令、數據視圖同步更新、使用的是ES5提供的Object.defineProperty()這個方法實現數據劫持
數據如何從模型同步到視圖?當模型中數據發生變化時會觸發Object.defineProperty的set方法,在這個方法內部可以劫持到數據的改變,而後就能夠在該方法內部通知視圖更新
視圖中的數據如何同步到模型中?(v-model指令是怎麼實現改變了元素中的數據同步到模型中)監聽表單元素的change事件,在change事件中能夠拿到用戶輸入的數據,而後給模型中的數據賦值
SEO優化
詳解:https://segmentfault.com/a/1190000002994538
SEO:搜索引擎優化.
白帽SEO:改良和規範網站設計,使之對搜索引擎和用戶更加友好,是一種搜索引擎推薦的作法。
黑帽SEO:利用或者放大搜索引擎的缺陷,使用不正當競爭獲取更多的訪問量。(例如最近花千骨電視劇熱播,立刻有一些網站使用這個標題標題,可是內容倒是推銷廣告的,給廣大網名形成很大困擾)。
SEO的主要方面:
cookies , sessionStorage和localStorage區別
瀏覽器緩存機制
從緩存位置上來講分爲四種,而且各自有優先級,當依次查找緩存且都沒有命中的時候,纔會去請求網絡。
網頁性能
跨域問題如何解決
優雅降級和漸進加強
優雅降級:一開始就構建站點的完整功能,而後 針對瀏覽器測試和修復 。好比一開始使用 CSS3 的特性構建了一個應用,而後逐步針對各大瀏覽器進行 hack 使其能夠在低版本瀏覽器上正常瀏覽
漸進加強:一開始就針對低版本瀏覽器進行構建頁面,完成基本功能,而後再針對高級瀏覽器進行效果、交互、追加功能達到更好的體驗。
webpack
webpack是一個模塊打包工具,可使用它管理項目中的模塊依賴,並編譯輸出模塊所需的靜態文件。它能夠很好地管理、打包開發中所用到的HTML,CSS,JavaScript和靜態文件(圖片,字體)等,讓開發更高效。對於不一樣類型的依賴,webpack有對應的模塊加載器,並且會分析模塊間的依賴關係,最後合併生成優化的靜態資源。
寫在最後
若是有什麼錯誤,還請各位大佬指出在評論留言,弟弟會更改。