以下題目都是在面試過程中整理的 答案不是標(biāo)準(zhǔn)炸庞。如有雷同純屬耦合腌乡,可與博主及時(shí)聯(lián)系!
1醉途、常用h5標(biāo)簽以及 h5的優(yōu)勢(shì)以及 兼容性問題處理
常用:
--新增input類型 search url email? tel? range number color date time dataTime
--web存儲(chǔ)(localStorage sessionStorage)
--表單元素dataList
--表單屬性 autocomplete? autofocus? placeholder? requried
--新增h5標(biāo)簽 artical aside details footer header? video audio
優(yōu)勢(shì):
--Video radio減少對(duì)外部插件的需求(比如 Flash)
--改善用戶體驗(yàn)洒缀,比如input里的email url在手機(jī)頁(yè)面里調(diào)取鍵盤時(shí)候,
--相對(duì)于傳統(tǒng)表單類型提供了新的驗(yàn)證方式:js中提供的是 郵箱驗(yàn)證checkValidity()锌历;css中提供了 input:valid / input:invalid
--對(duì)本地離線存儲(chǔ)的更好的支持
--H5完美兼容移動(dòng)端設(shè)備
兼容性問題:
--ie6-8不兼容h5標(biāo)簽: 我們可以引入google的html5.js文件
--移動(dòng)端click會(huì)產(chǎn)生200-300ms的延遲:引入fastclic.js 或者使用zepto的touch事件
--在移動(dòng)端用position:fixed定位時(shí)候如果有定位里要調(diào)取鍵盤,位置會(huì)跑偏:不使用 position:fixed 用iscroll
--1像素邊框的問題
2峦筒、解釋一下mvc和mvvm模式究西?
MVC: 模型-視圖-控制器(Model-View-Controller)(Model:模型,數(shù)據(jù)的擁有者勘天;view:用戶界面怔揩;controller:負(fù)責(zé)將view中用戶的動(dòng)作傳達(dá)給model捉邢,將model的數(shù)據(jù)通過view展現(xiàn)出來;)mvc是單向數(shù)據(jù)通信model和view永遠(yuǎn)不能相互通信商膊,只能通過controller傳遞伏伐;controller可以直接讀寫調(diào)用model,model通過notification 和 kvo機(jī)制與controller間接通信晕拆;controller可以直接與view對(duì)話藐翎,通過outlet直接操作view,view通過action向controller報(bào)告事件的發(fā)生实幕,controller是view的直接數(shù)據(jù)源(數(shù)據(jù)很可能是controller從model中取得并經(jīng)過加工了)吝镣。Controller是view的代理(delegate),以同步view和controller
? MVVM:model--view--viewModel? 模型-視圖-視圖模型? 是mvc的增強(qiáng)版昆庇,vue.js? angularjs 都是mvvm框架
【模型】是指后端傳遞的數(shù)據(jù)末贾,用純javascript對(duì)象表示;【視圖】指的是所看到的頁(yè)面;【視圖模型】是mvvm模式的核心 是連接view 和model的橋梁。
ViewModel有兩個(gè)方向:一是將模型轉(zhuǎn)化成視圖整吆,即將后端傳遞的數(shù)據(jù)轉(zhuǎn)化成所看到的頁(yè)面拱撵。實(shí)現(xiàn)方式:數(shù)據(jù)綁定;二是將視圖轉(zhuǎn)化成模型,即將所看到的頁(yè)面轉(zhuǎn)化成后端數(shù)據(jù)表蝙。實(shí)現(xiàn)方式:DOM事件監(jiān)聽主要是監(jiān)聽表單元素
這兩個(gè)方向都實(shí)現(xiàn)的拴测,我們稱之為數(shù)據(jù)的雙向綁定。
總結(jié):在mvvm的框架下視圖和模型是不能直接通信的府蛇。它們通過viewModel來通信集索,viewModel通常要實(shí)現(xiàn)一個(gè)observer觀察者,當(dāng)數(shù)據(jù)發(fā)生變化汇跨,viewModel能夠監(jiān)聽到數(shù)據(jù)的變化务荆,然后通知到對(duì)應(yīng)的視圖做自動(dòng)跟新(單向綁定);而當(dāng)用戶操作視圖扰法,viewModel也能監(jiān)聽到視圖的變化蛹含,然后通知數(shù)據(jù)做改動(dòng),這樣就實(shí)現(xiàn)了數(shù)據(jù)的雙向綁定塞颁。
并且mvvm中的view和viewModel可以相互通信
Vue就是基于mvvm模式實(shí)現(xiàn)的一套框架浦箱,在vue中:Model:指的是js中的數(shù)據(jù),如對(duì)象祠锣,數(shù)組等;View:指的是頁(yè)面視圖;ViewModel:指的是vue實(shí)例化對(duì)象
3酷窥、都用過哪些css3屬性?
--Border-radius伴网、box-show陰影蓬推、background-size、text-shadow文本陰影澡腾、word-wrap自動(dòng)換行沸伏、text-wrap:none不允許換行糕珊、text-overflow:clip 文本溢出修剪文本、@font-face
--2D轉(zhuǎn)換:transform(移動(dòng):translate毅糟、旋轉(zhuǎn):rotate红选、縮放:scale、翻轉(zhuǎn):skew())
--過渡:transition? div{transition:all 2s ease 0 2s} 應(yīng)用過渡的屬性名姆另、過渡花的時(shí)間喇肋、曲線、延遲(前兩項(xiàng)必填)
--動(dòng)畫 用@keyframes創(chuàng)建動(dòng)畫 用animation把動(dòng)畫綁定到某個(gè)選擇器上
? @keyframes myfirst{ from{background:red}? to{background:yellow}}
? div{animation:myfirst 2s}
--線性漸變
4迹辐、瀏覽器兼容性問題
標(biāo)簽兼容性問題:h5標(biāo)簽不兼容 頁(yè)面里引入html5.js
都處理過哪些css兼容問題蝶防?之前處理兼容到IE幾?
--垂直居中:vertical-align:middle 不起作用明吩,設(shè)置line-height:
--ie6中塊狀元素設(shè)置浮動(dòng)间学,同時(shí)又設(shè)置margin時(shí),會(huì)出現(xiàn)雙倍邊距的問題?例float:left;width:100px;margin:0?100px;??
解決:?設(shè)置display:inline;把塊狀元素轉(zhuǎn)換為行內(nèi)元素
--CSS控制透明度問題:一般就直接 opacity: 0.6 ; IE就 filter: alpha(opacity=60)
但在IE6下又有問題贺喝,所以又得弄成 filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=60);
或者引入DDPngMin.js
--ie6下div高度無法小于10px? 給div加overflow:hidden
--表單元素行高不一致 不對(duì)其菱鸥,給其設(shè)置float
--在a標(biāo)簽里嵌套img時(shí) 某些瀏覽器中img會(huì)有藍(lán)色邊框 ;給img加border:0或者border:none
--幾個(gè)圖片放在一起默認(rèn)有間隙 躏鱼;給圖片加float:left
--按鈕默認(rèn)大小不一致:直用a標(biāo)簽來模擬按鈕添加樣式 或者 如果按鈕是一張背景圖片可以直接給按鈕加背景圖片
--如果父元素寬度是100%;子元素各為50%殷绍,總和會(huì)超出100%:給右邊浮動(dòng)的元素添加clear:right;
--鼠標(biāo)指針cursor:hand 只有ie識(shí)別其他瀏覽器不識(shí)別:使用cursor :pointer
--如果給上邊元素設(shè)置了margin-bottom 給下邊元素設(shè)置了margin-top 瀏覽器只會(huì)識(shí)別較大的:只設(shè)置一個(gè)
--不同瀏覽器對(duì)于標(biāo)簽?zāi)J(rèn)的padding margin 差異較大 我們?cè)O(shè)置margin:0; padding:0; 來清除默認(rèn)樣式
--瀏覽器最小字體是12px染苛;如果想設(shè)置更小字體 transform scole?
--給父元素下的幾個(gè)子元素設(shè)置了display:inline-block 子元素之間會(huì)有間距,給父元素加font-size:0
5主到、原生js兼容性問題茶行?
1>、瀏覽器本身盒子模型client系列和scroll系列都需要寫兩套
document.documentElement.clientWidth||document.body.clientWidth
document.documentElement.scrollTop||document.body.scrollTop
2>登钥、獲取所有瀏覽器計(jì)算過的樣式 getComputedStyle
ie6-8不兼容(window下沒有這個(gè)屬性) 用currentStyle
window.getComputedStyle(box,null).height
box.currentStyle.height
3>畔师、通過類名獲取元素:getElementsByClassName,在ie6-8下不兼容
我們需要自己封裝一個(gè)方法兼容所有瀏覽器
4>、事件
----e=e||window.event
----e.pageX \ e.pageY? ie6-8沒有這個(gè)屬性 我們通過clientY+滾動(dòng)條卷去的高度來獲取
----事件源e.target=e.target||e.scrElement
----阻止瀏覽器的默認(rèn)行為 e.preventDefault() 在ie6-8中e.returnValue=false
? e.preventDefault?e.preventDefault():e.returnValue=false
----阻止事件冒泡傳播 e.stopPropagation
? e.stopPropagation?e.stopPropagation():e.cancelBubble=true;
5>牧牢、事件監(jiān)聽
addEventListener? ie6-8用attachEvent
box.addEventListener(‘click’,fn1,false);
Box.attachEvent(‘onclick’,fn1);
5>看锉、dom節(jié)點(diǎn)相關(guān)問題 獲取元素節(jié)點(diǎn) 以下幾個(gè)ie6-8都不支持 需要用到節(jié)點(diǎn)的去處理
nextElementSibling? ? 獲取下一個(gè)元素節(jié)點(diǎn)? nextSibling? ? ? ? ?
previousElementSibling? 獲取上一個(gè)元素節(jié)點(diǎn)? previousSibling
firstElementChild? ? ? 獲取第一個(gè)元素節(jié)點(diǎn)? firstChild
lastElementChild? ? ? 獲取最后一個(gè)元素節(jié)點(diǎn)lastChild
6、跨域有幾種方法解決塔鳍?解釋jsonp原理
1>伯铣、jsonp? (原生方式實(shí)現(xiàn)、jquery的ajax轮纫、jquery的jsonp插件)
? Jsonp實(shí)現(xiàn)原理:引入一個(gè)script文件路徑是需要調(diào)用的跨域的數(shù)據(jù)地址 將函數(shù)名傳遞給callback腔寡,文件載入成功后會(huì)執(zhí)行url中指定的函數(shù),并把我們需要的jsop數(shù)據(jù)作為參數(shù)傳遞給這個(gè)函數(shù)
? Jsonp缺點(diǎn):只支持get請(qǐng)求 不支持 post請(qǐng)求
2>掌唾、Document.domain+iframe跨域:? Document.domain返回當(dāng)前文件的域名
只適用于主域相同 子域不同的框架之間的交互放前,
例如:http://www.domain.com/a.html? http://child.domain.com/b.html
3>忿磅、local.hash+iframe跨域
a欲與b跨域相互通信,通過中間頁(yè)c來實(shí)現(xiàn)凭语,三個(gè)頁(yè)面不域之間利用iframe的location.hash傳值贝乎,相同域之間直接js訪問來通信
4>、Window.name? 在一個(gè)窗口的生命周期內(nèi)叽粹,窗口雜入的所有頁(yè)面都是共享一個(gè)window.name,每個(gè)頁(yè)面對(duì)window.name都有讀寫的權(quán)限览效,window.name是持久存在一個(gè)窗口載入過的所有頁(yè)面中的
5>、H5的window.postMessage
6>虫几、跨域資源共享 CORS
7>锤灿、nginx代理跨域
8>、nodejs中間代理跨域
9>辆脸、webSocket協(xié)議跨域
注意:如果是跨域并且是post請(qǐng)求 那么我們使用 CORS 跨域資源共享但校,但是ie9以及以下支持不是很好我們用window.name來實(shí)現(xiàn)
參考文章:
https://segmentfault.com/a/1190000011145364 特別全特別好
https://www.cnblogs.com/itmacy/p/6958181.html? 還可以這里有三種
http://caibaojian.com/jquery-ajax-post-cors.html? post跨域 CORS+window.name
7、怎么做響應(yīng)式布局啡氢?
一種:流式布局法(媒體查詢):
(pc和手機(jī)公用一套時(shí):先做一版和設(shè)計(jì)稿一樣的再調(diào)其他手機(jī)的)容器和盒子的寬度一般都不寫状囱,而是用百分比;其余的樣式(字體倘是、padding亭枷、margin)都按照設(shè)計(jì)稿的一半設(shè)置;對(duì)于有些手機(jī)下不是很好看的再用media調(diào)整
一種:rem響應(yīng)式布局法(等比布局)推薦
給html設(shè)一個(gè)font-size值:100px=1rem搀崭; 完全按照設(shè)計(jì)稿的大小來做叨粘,將px換算成rem;? ? ? 用js來設(shè)置不同屏幕下的font-size值瘤睹;
8升敲、媒體查詢都可以設(shè)置哪些屬性?
Width | min-width | max-width()
Height | min-height| max-height(輸出設(shè)備渲染區(qū)域的高度 即 可視區(qū)域)
Device-width | min-device-width | max-device-width (輸出設(shè)備的寬度)
Device-height| min-device-height | max-device-height(輸出設(shè)備的高度)
Aspect-ratio | min-aspect-ratio | max-aspect-ratio (目標(biāo)顯示區(qū)域的寬高比)
eg:min-aspect-ratio:1/1
Device-Aspect-ratio | min-device-aspect-ratio | max-device-aspect-ratio(設(shè)備的寬高比)
Color|min-color|max-color:顏色
Color-index | min-color-index | max-color-index顏色索引
Monochrome|min-monochrome|max-monochrome黑白
Orientation(landscape|portrait)橫屏|豎屏
Resolution分辨率
Scan掃描
grid網(wǎng)格
媒體查詢最常用的類型:all(適合所有設(shè)備)轰传;screen(計(jì)算機(jī)屏幕)默認(rèn)
9 驴党、不同的移動(dòng)設(shè)備怎么適配?
設(shè)置meta標(biāo)簽viewport获茬;給html設(shè)一個(gè)font-size值:100px=1rem港庄;? ?完全按照設(shè)計(jì)稿的大小來做,將px換算成rem锦茁;? ?用js來設(shè)置不同屏幕下的font-size值攘轩;
10、閉包是什么码俩??jī)?yōu)勢(shì)和缺點(diǎn)各是什么度帮?什么情況下會(huì)用到閉包?
在函數(shù)執(zhí)行的時(shí)候形成一個(gè)私有作用域,保護(hù)里邊的變量不受外界干擾。外面獲取不到也修改不了
嵌套函數(shù)更能體現(xiàn)出的特性:當(dāng)一個(gè)函數(shù)返回它內(nèi)部定義的一個(gè)函數(shù)時(shí)笨篷,就產(chǎn)生了一個(gè)閉包瞳秽,閉包不但包括被返回的函數(shù),還包括這個(gè)函數(shù)的定義環(huán)境(當(dāng)一個(gè)內(nèi)部函數(shù)被其外部函數(shù)之外的變量引用時(shí)率翅,就形成了一個(gè)閉包)练俐。
閉包的用途:
一是實(shí)現(xiàn)嵌套的回調(diào)函數(shù),
二是實(shí)現(xiàn)變量的私有化:js對(duì)象沒有私有屬性冕臭,也就是對(duì)象的每個(gè)屬性都是暴露給外部的腺晾,這樣可能有安全隱患
優(yōu)勢(shì):保護(hù)了閉包里的變量不受外界干擾,它是私有的
缺點(diǎn):閉包使用不當(dāng)會(huì)造成大量?jī)?nèi)存的堆積
11辜贵、優(yōu)化網(wǎng)站性能
----減少http請(qǐng)求次數(shù)(js悯蝉、css能合并的合并、圖片能做成雪碧圖的做成雪碧圖)托慨;
----使用瀏覽器緩存(根據(jù)服務(wù)器端的響應(yīng)header鼻由,設(shè)置緩存狀態(tài);)
----使用離線緩存(把常用的變動(dòng)少的js厚棵、css蕉世、圖片存儲(chǔ)到localstorage,第二次訪問的時(shí)候直接走本地緩存婆硬,在移動(dòng)端應(yīng)用廣泛)
----使用壓縮組件:傳輸之前狠轻,先使用GZIP壓縮再傳輸給客戶端,客戶端接收之后由瀏覽器解壓
----圖片延遲加載:提高網(wǎng)頁(yè)打開的速度
----將css樣式表放在head頭部 ((將css放在頭部柿祈,防止出現(xiàn)白屏哈误,改善用戶體驗(yàn))
----將js腳本放在底部(嵌入的js放在底部,如果放在head里要放在css前邊);
將js放在底部 減少頁(yè)面加載的時(shí)間躏嚎,瀏覽器在下載js的時(shí)候會(huì)阻止其他一切活動(dòng),比如其他資源的下載菩貌,內(nèi)容的呈現(xiàn)卢佣,直到j(luò)s下載、解析箭阶、執(zhí)行完后才開始css虚茶、圖片的并行下載,因?yàn)閖s中很可能有代碼直接改變了dom樹結(jié)構(gòu)比如使用document.write或appendChild仇参,甚至是直接使用location.href進(jìn)行跳轉(zhuǎn)嘹叫,瀏覽器為了防止出現(xiàn)js修改dom樹,需要重構(gòu)dom樹诈乒,所以就會(huì)阻塞其他的下載和呈現(xiàn)罩扇;
----使用外部的css、js 可以緩存到本地 下次用戶訪問時(shí)候提高頁(yè)面加載速度;減少內(nèi)聯(lián)的css、js
----精簡(jiǎn)js:剔除不必要的注釋喂饥、空白符(換行符歪玲、tab縮進(jìn)盔然、空格),減少文件大小、提高加載速度导匣;可以使用ShrinkSafe來精簡(jiǎn)JS? http://shrinksafe.dojotoolkit.org/
----精簡(jiǎn)css:移除空白、注釋蹦锋、0px改成0甸私、顏色使用縮寫#fff、樣式最后一個(gè)的硝岗;不寫氢哮;
----避免使用濾鏡,濾鏡會(huì)增加瀏覽器內(nèi)存的開支辈讶,最好使用png圖片命浴;
可以使用CSS Compressor http://www.cssdrive.com/index.php/main/csscompressor /
----壓縮css js 圖片
----減少DOM回流和重繪:js腳本頻繁的對(duì)DOM進(jìn)行操作會(huì)導(dǎo)致頁(yè)面重繪和回流,避免使用js來修改頁(yè)面布局贱除,消耗頁(yè)面性能(例如 數(shù)據(jù)綁定時(shí)候可以用文檔碎片(createDocumentFragment)
----標(biāo)明寬度及高度(如果瀏覽器沒有找到這兩個(gè)參數(shù)生闲,它需要一邊下載圖片一邊計(jì)算大小,如果圖片很多月幌,瀏覽器需要不斷地調(diào)整頁(yè)面碍讯。這不但影響速度,也影響瀏覽體驗(yàn)扯躺。 當(dāng)瀏覽器知道了高度和寬度參數(shù)后捉兴,即使圖片暫時(shí)無法顯示,頁(yè)面上也會(huì)騰出圖片的空位录语,然后繼續(xù)加載后面的內(nèi)容倍啥。從而加載時(shí)間快了,瀏覽體驗(yàn)也更好了澎埠。)
----網(wǎng)址后面加斜杠”/”(加了斜杠會(huì)減少一次判斷過程虽缕,直接返回網(wǎng)站設(shè)置的存放在網(wǎng)站根目錄下的默認(rèn)頁(yè)面)
----精簡(jiǎn)圖片、Flash
對(duì)大圖片蒲稳、Flash氮趋,要在效果和大小之間做出平衡。
----切分組件到多個(gè)域
主要的目的是提高頁(yè)面組件并行下載能力江耀。但不要跨太多域名剩胁,建議采用2個(gè)子域名。
----使用事件代理
? 如果一個(gè)div中有10個(gè)按鈕 不需要給每個(gè)按鈕加事件綁定祥国,給div加事件綁定就可以了昵观,事件冒泡時(shí)可以捕捉到事件,并判斷是哪個(gè)事件發(fā)出的
----減少dom元素的數(shù)量
一個(gè)復(fù)雜的頁(yè)面意味著需要下載更多數(shù)據(jù),同時(shí)也意味著JavaScript遍歷DOM的效率越慢
--不要出現(xiàn)404錯(cuò)誤
--避免使用濾鏡
參考網(wǎng)址:
http://www.360doc.cn/article/5054188_179121203.html
http://www.reibang.com/p/897569276fdf
11索昂、怎樣編寫高性能的javascript
--手動(dòng)釋放沒有用的對(duì)象內(nèi)存 obj=null
--解綁那些不再需要的事件監(jiān)聽器建车,尤其是那些即將被銷毀的DOM對(duì)象所綁定的事件監(jiān)器
--減少對(duì)DOM的操作,減少dom的回流和重繪椒惨。例如:往頁(yè)面里綁定dom元素的時(shí)候可以使用createDocumentFragment一次性添加到頁(yè)面里缤至,而不是一條一條的添加
--使用惰性思想,解決每次都要進(jìn)行判斷這個(gè)問題康谆;例如:為了兼容標(biāo)準(zhǔn)瀏覽器和ie瀏覽器领斥,我們每次都需要對(duì)瀏覽器環(huán)境進(jìn)行一次判斷,用惰性思想只需判斷一次即可
--變量盡量使用局部變量沃暗,避免使用全局變量月洛,函數(shù)內(nèi)的變量函數(shù)執(zhí)行完后就會(huì)銷毀,而全局變量頁(yè)面關(guān)閉或刷新才會(huì)銷毀孽锥,而且污染全局變量
--處理瀏覽器兼容性問題的時(shí)候嚼黔,我們盡量避免使用try catch 因?yàn)椴还墚?dāng)前是瀏覽器兼不兼容都需要先把try中的代碼執(zhí)行一遍,降低了性能惜辑。我們可以判斷當(dāng)前瀏覽器中是否存在這個(gè)屬性方法唬涧,存在就兼容 不存在就不兼容,或者判斷瀏覽器版本號(hào)盛撑;常用的是第二種方法
--函數(shù)內(nèi)部不要返回一個(gè)未聲明的變量碎节,會(huì)污染外部變量,會(huì)使速度變慢
--在存儲(chǔ)數(shù)據(jù)的時(shí)候能使用數(shù)組就不使用對(duì)象抵卫,因?yàn)樽兞繉?duì)象要比遍歷數(shù)組快的多狮荔,內(nèi)存方面也高效
--使用對(duì)象時(shí)的技巧:使用一個(gè)構(gòu)造函數(shù)來創(chuàng)建對(duì)象。這將確保它創(chuàng)建的全部對(duì)象具有同樣的隱藏類介粘,并且有助于避免更改這些類殖氏,速度也快于Object.create()
--使用模塊模式緩存函數(shù),性能要優(yōu)于原型模式
--使用數(shù)組時(shí)候姻采,盡量不要?jiǎng)h除數(shù)組元素受葛,這樣改變了數(shù)組的索引和解構(gòu)性能就會(huì)變慢,可以把數(shù)組最后一項(xiàng)拿過來替換當(dāng)前項(xiàng)偎谁,再刪除數(shù)組最后一項(xiàng)
--盡量不要使用for-in循環(huán)訪問數(shù)組,建議用for循環(huán) 并且將for循環(huán)里的ary.leng保存在一個(gè)變量里纲堵,不然每次都要計(jì)算
--獲取dom對(duì)象要進(jìn)行緩存巡雨,不要每次都去獲取
參考網(wǎng)站:https://www.cnblogs.com/yjbjingcha/p/7029057.html
12、jquery中this和$(this)的區(qū)別
This表示的是javascript提供的當(dāng)前對(duì)象
$(this)表示的是用jquery封裝好的當(dāng)前對(duì)象
13席函、移動(dòng)端和pc端有什么區(qū)別铐望?
兼容性:pc要考慮的兼容性更多一些;移動(dòng)用的是webkit內(nèi)核 需要考慮的兼容性少一些,更多考慮的是不同手機(jī)分辨率的適配正蛙;
布局:移動(dòng)端要做到自適應(yīng)我們用rem布局
動(dòng)畫:pc端對(duì)于css3動(dòng)畫不兼容督弓,但在移動(dòng)端我們要做一些動(dòng)畫、特效用css3簡(jiǎn)單又高效
框架上:pc用的是jquery乒验;移動(dòng)用的是zepto愚隧,更小一些
事件:移動(dòng)端多出來的是觸屏事件,而缺少hover事件锻全,移動(dòng)端 彈出手機(jī)鍵盤的處理
操作方式:pc端使用鼠標(biāo)操作相對(duì)單一(左擊狂塘、右擊、雙擊鳄厌、滑動(dòng))交互效果少荞胡;移動(dòng)端手指操作(點(diǎn)擊、滑動(dòng)了嚎、雙擊泪漂、雙指放大、雙指縮小歪泳、五指收縮萝勤、蘋果最近的3Dtouch按壓力度、搖一搖)夹囚;
屏幕尺寸:移動(dòng)端設(shè)備大纵刘,容錯(cuò)性高一些;移動(dòng)端相對(duì)來說屏幕小荸哟,操作局限性大假哎,這樣在設(shè)計(jì)上可用的空間尤得珍貴
傳感器:移動(dòng)端的(壓力、方向鞍历、重力舵抹、GPS、NFC劣砍、 指紋識(shí)別惧蛹、3Dtouch、陀螺儀)
14刑枝、同步和異步的區(qū)別
Javascript是單線程的香嗓,單線程意味著,所有任務(wù)需要排隊(duì)装畅,前一個(gè)任務(wù)結(jié)束靠娱,才會(huì)執(zhí)行后一個(gè)任務(wù),所有任務(wù)分為兩種掠兄,一種是同步任務(wù)像云,一種是異步任務(wù)
同步:在主線程上排隊(duì)執(zhí)行的任務(wù)锌雀,只有前一個(gè)任務(wù)執(zhí)行完畢,才能執(zhí)行后一個(gè)任務(wù)迅诬;
異步:不進(jìn)入主線程而進(jìn)入“任務(wù)隊(duì)列”的任務(wù)腋逆,只有等主線程任務(wù)執(zhí)行完畢,”任務(wù)隊(duì)列“開始通知主線程請(qǐng)求執(zhí)行任務(wù)侈贷,該任務(wù)才會(huì)進(jìn)入主線程執(zhí)行
定時(shí)器惩歉、事件綁定、ajax讀取數(shù)據(jù)的時(shí)候一般都設(shè)置為異步編程铐维、回調(diào)函數(shù)
15柬泽、es6都用過哪些?
1>嫁蛇、Let變量锨并、const常量 是塊級(jí)作用域(只對(duì)當(dāng)前函數(shù)內(nèi)部、代碼塊內(nèi)容有效)即{}大括號(hào)的代碼塊就是let和const的作用域
2>睬棚、模板字符串``反引號(hào) :將表達(dá)式嵌入字符串中進(jìn)行拼接 用${}來界定:`hello ${name}`
const template=`<div> <span>nihaoaaaaa</span></div>`
3>第煮、includes 判斷是否包含 然后返回布爾值 str.includes(‘y’)
4>、repeat 獲取字符串重復(fù)n次 s.repeat(3);獲取s字符串并重復(fù)3次
5>抑党、函數(shù):為我們提供了默認(rèn)值:function action(num=300){}
? ? ? ? ? 箭頭函數(shù):不需要function 省略return 繼承上下文的this
當(dāng)你有且只有一個(gè)參數(shù)時(shí)候可以省略(),只有一個(gè)表達(dá)式時(shí)候可以省略{} [1,2,3].map(x=>x+1)
6>包警、鍵值對(duì)重名可簡(jiǎn)寫
7>、使字面量賦值更簡(jiǎn)潔:
const people={
? ? name:"liu",
? ? getName:function(){
? ? ? ? Console.log(this.name)}}
const people={
? ? name:"liu",
? ? getName(){
? ? ? ? console.log(this.name)}}
8>底靠、數(shù)組和對(duì)象不用一個(gè)一個(gè)的提群蕖:解構(gòu)
9>、導(dǎo)入import 導(dǎo)出 export
? 全部導(dǎo)入:import people from ‘./example’
? 將整個(gè)模塊當(dāng)作單一對(duì)象進(jìn)行導(dǎo)入:該模塊所有導(dǎo)出都會(huì)作為對(duì)象的屬性存在
? Import * as example from “./example.js”
Console.log(example.name)
Console.log(example.age)
Console.log(example.getName())
部分導(dǎo)入
Import {name,age} from ‘./example’
導(dǎo)出默認(rèn) 有且只有一個(gè)默認(rèn)
export default App
導(dǎo)出部分
Export class App extend Component{}
16暑中、 html語義化的理解壹瘟?
Html語義化是正確的標(biāo)簽做正確的事情;
有利于搜索引擎優(yōu)化提高網(wǎng)頁(yè)權(quán)重鳄逾;便于開發(fā)者閱讀維護(hù)提高效率稻轨;清楚的看出網(wǎng)頁(yè)結(jié)構(gòu)增強(qiáng)可讀性;
例如:p是段落雕凹;h1-h5是標(biāo)題殴俱;ul、ol是無序列表枚抵;nav是導(dǎo)航线欲;header頁(yè)眉;footer頁(yè)腳汽摹;strong強(qiáng)調(diào)询筏;em斜體
17、jquery 和zepto的區(qū)別
1>竖慧、jquery主要用于pc嫌套,zepto主要用于移動(dòng)端
2>、jquery中提供了很多選擇器類型和dom操作方法圾旨,但zepto中只是先了部分常用的選擇器和方法:eg:jq中的動(dòng)畫方法有(animate踱讨、hide、show砍的、toggle痹筛、fadeIn、fadeOut廓鞠、fadeTaggle帚稠、slideDown、slideUp床佳、slideToggle)滋早,但zepto中只有animate
3>、zepto比jq小的多
4>砌们、zepto的animate動(dòng)畫方法支持了css動(dòng)畫
5>杆麸、zepto專門準(zhǔn)備了移動(dòng)端常用的事件操作:tap(點(diǎn)擊)、singleTap(單擊)浪感、doubleTap(雙擊)昔头、longTap(長(zhǎng)按)、swipe(滑動(dòng))影兽、swipeUp揭斧、swipeDown、swipeleft峻堰、swiperight
18讹开、從地址欄輸入url后到頁(yè)面渲染說一下具體過程?能說多細(xì)就說多細(xì)(未寫完)
域名解析(首先搜索瀏覽器自身的DNS緩存茧妒,看自身緩存中有沒有對(duì)應(yīng)的域名萧吠,看有沒有過期,如果沒有 瀏覽器會(huì)找操作系統(tǒng)自身的DNS緩存桐筏,如果沒有嘗試讀取host文件)纸型;
先向DNS發(fā)送一條請(qǐng)求->找到外網(wǎng)的ip和端口號(hào)----->再通過外網(wǎng)的ip和端口號(hào)找到這臺(tái)服務(wù)器----->找到服務(wù)器對(duì)應(yīng)的端口號(hào),服務(wù)器接收到請(qǐng)求后把請(qǐng)求頁(yè)面中的源代碼返回給客戶端梅忌,瀏覽器接收到源代碼后按照w3c規(guī)范進(jìn)行解析并請(qǐng)求html頁(yè)面中的(css狰腌、js、圖片)--最后瀏覽器對(duì)頁(yè)面進(jìn)行渲染
19牧氮、什么是事件冒泡琼腔?? 什么是事件委托?
事件冒泡:從當(dāng)前觸發(fā)的事件目標(biāo)一級(jí)一級(jí)往上傳遞踱葛,依次觸發(fā)丹莲,直到document為止
事件委托:利用事件的冒泡機(jī)制光坝,將事件委托給更大范圍的DOM元素,提高了性能(我們可以給整個(gè)頁(yè)面指定一個(gè)onclick事件處理程序甥材,而不必給每個(gè)可單擊的元素分別添加事件處理程序)
20盯另、js怎樣添加、移除洲赵、移動(dòng)鸳惯、復(fù)制、創(chuàng)建和查找節(jié)點(diǎn)
(1) 創(chuàng)建新節(jié)點(diǎn)
createDocumentFragment() //創(chuàng)建一個(gè)DOM片段
createElement()? //創(chuàng)建一個(gè)具體的元素
createTextNode() //創(chuàng)建一個(gè)文本節(jié)點(diǎn)
(2) 添加叠萍、移除芝发、替換、插入
appendChild()
removeChild()
replaceChild()
insertBefore()
(3) 查找
getElementsByTagName()
getElementsByName()
getElementById()
(4) 移動(dòng)節(jié)點(diǎn)
? ?odiv.style.left=parseInt(odiv.style.left)+50+”px”
? ?<div id=’odiv’ style=’position:absolute;left:10px’></div>
21苛谷、您對(duì)js原型是如何理解的辅鲸?您對(duì)js繼承是如何理解的?舉例說明js的繼承
This:
This表示當(dāng)前對(duì)象抄腔;
如果在全局范圍內(nèi)使用this瓢湃,這指當(dāng)前頁(yè)面對(duì)象window;
如果在函數(shù)中使用this赫蛇,函數(shù)運(yùn)行時(shí)在什么對(duì)象上被調(diào)用绵患;
(自執(zhí)行函數(shù)中的this永遠(yuǎn)是window;給dom元素綁定方法方法執(zhí)行時(shí)里邊的this是當(dāng)前元素悟耘;方法執(zhí)行時(shí)看前邊有沒有點(diǎn) 點(diǎn)前邊是誰方法中的this就是誰落蝙;類中的this是當(dāng)前類的實(shí)例;call apply bind 對(duì)可以改變this關(guān)鍵字一旦遇到他們以前4條都沒用)
Prototype:
prototype本質(zhì)上還是一個(gè)javascript對(duì)象暂幼;每一個(gè)函數(shù)都有一個(gè)默認(rèn)的prototype屬性筏勒;如果這個(gè)函數(shù)被用在創(chuàng)建自定義對(duì)象的場(chǎng)景中,我們稱為構(gòu)造函數(shù)旺嬉。
作為類比js中的內(nèi)部的數(shù)據(jù)類型 -字符串(String)管行、數(shù)字(Number)、數(shù)組(Array)邪媳、對(duì)象(Object)捐顷、日期(Data)都是作為構(gòu)造函數(shù)來實(shí)現(xiàn)的
例如數(shù)組中的許多方法(concat、join雨效、push)都是在prototype中定義的迅涮,如果我們修改了這些類的原型,那些預(yù)定義的方法就消失了徽龟,但我們可以向其中添加自己的擴(kuò)展方法(如果用for in方法循環(huán)數(shù)組里的每一項(xiàng)的時(shí)候叮姑,擴(kuò)展的方法也會(huì)被循環(huán)出來,我們需要這樣做arr.hasOwnProperty(i) )
Constructor:
每一個(gè)函數(shù)都有一個(gè)默認(rèn)的屬性prototype据悔,而這個(gè)prototype上有一個(gè)constructor默認(rèn)指向這個(gè)函數(shù)传透;如果我們重新定義了函數(shù)的prototype耘沼,那么construction就不再指向這個(gè)函數(shù),我們可以在這個(gè)函數(shù)的原型上擴(kuò)展方法或者重新覆蓋下Person.prototype.constructor=Person;
22 旷祸、什么是原型的繼承
? 1>耕拷、原型繼承是我們js中常用的一種繼承方式;
? 2>托享、子類B想要繼承父類A中所有的屬性和方法(私有+公有)只需讓B.prototype=new A 即可
? 3>、原型繼承的特點(diǎn):它是把父類中私有+公有的都繼承到了子類的原型上(子類公有)
? 核心:原型繼承并不是把父類中的屬性和方法克隆一份一模一樣的給B浸赫,而是讓B和A之間增加了原型鏈的鏈接闰围,以后B的實(shí)例n想用A中的getx方法,需要一級(jí)一級(jí)向上查找
23既峡、數(shù)組5中迭代方法:
every():對(duì)數(shù)組中每一項(xiàng)執(zhí)行函數(shù)羡榴,如果每一項(xiàng)都返回true,則該方法返回true
some():對(duì)數(shù)組中每一項(xiàng)執(zhí)行函數(shù)运敢,只要有一項(xiàng)返回了true校仑,則該方法返回true
filter():對(duì)數(shù)組中的每一項(xiàng)執(zhí)行函數(shù),把里面返回true的項(xiàng)传惠,組成一個(gè)數(shù)組返回
forEach():對(duì)數(shù)組中的每一項(xiàng)執(zhí)行函數(shù)迄沫。沒有返回值。類似于for循環(huán)
map():對(duì)數(shù)組中的每一項(xiàng)執(zhí)行函數(shù)卦方,返回(處理后的)每一項(xiàng)
注:5種方法都不會(huì)改變數(shù)組本身羊瘩;函數(shù)都接收三個(gè)參數(shù)(數(shù)組中的每一項(xiàng)、每一項(xiàng)的索引值盼砍、數(shù)組對(duì)象本身)
var arr=[1,2,3,4,5];
var res=arr.every(function(i,index,o){ return i>2;});
console.log(res)? //false
24尘吗、類數(shù)組轉(zhuǎn)化為數(shù)組:
Array.prototype.slice.call(arguments);
25 、cookie不設(shè)置過期時(shí)間浇坐,默認(rèn)過期時(shí)間是多少睬捶?
關(guān)閉瀏覽器就結(jié)束了
26、怎樣解析后臺(tái)返回來的json格式的數(shù)據(jù)(JSON格式的字符串轉(zhuǎn)化為JSON格式的對(duì)象)
JSON 格式的字符串 var str1=’{“name”:”haorooms”,”sex”:”man”}’;
JSON 格式的對(duì)象 var str1={“name”:”haorooms”,”sex”:”man”};
JSON 格式的字符串轉(zhuǎn)化成JSON格式的對(duì)象
var obj=eval(‘(’+str+’)’);
Var obj=JSON.parse(str);
Var obj=str.parseJSON();//需要引入json.js庫(kù)
Var obj=$.parseJSON();//jquery里自帶的
JSON 格式的對(duì)象轉(zhuǎn)化成JSON格式的字符串
Var last=JSON.stringify(obj);
Var last=obj.toJSONString();//需要引入json.js庫(kù)
27近刘、網(wǎng)絡(luò)狀態(tài)碼
200或以2開頭 代碼請(qǐng)求已成功被服務(wù)器接收
3xx 系列 用來重定向的 301永久重定向擒贸、302臨時(shí)重定向、304本次讀取的內(nèi)容是讀取緩存中的數(shù)據(jù)
4xx 系列 客戶端請(qǐng)求錯(cuò)誤 400 客戶端傳遞給服務(wù)器的參數(shù)出現(xiàn)錯(cuò)誤跌宛、401無權(quán)限訪問酗宋、404客戶端訪問的地址不存在
5xx 系列? 服務(wù)器的錯(cuò)誤 500 未知的服務(wù)器錯(cuò)誤、503服務(wù)器已經(jīng)超負(fù)荷
28疆拘、用到哪些css插件
Bootstrap蜕猫、animate.css
29、http請(qǐng)求信息由哪三部分組成
請(qǐng)求方法URI協(xié)議/版本哎迄、請(qǐng)求頭回右、請(qǐng)求正文
30隆圆、清理網(wǎng)站緩存的方法
? meta方法
Jauery Ajax清除瀏覽器緩存:cache:false 或者 url參數(shù)后加隨機(jī)數(shù)或加隨機(jī)時(shí)間
31、數(shù)據(jù)類型檢測(cè)的四種方式
? 1)翔烁、 typeof 返回的是字符串 ”number” , ”boolean” , “string” , “undefined” , “function” , “object” 用途檢測(cè)參數(shù)是否傳值 或者檢測(cè)參數(shù)是不是function
? ? ? 局限性:不能區(qū)分?jǐn)?shù)組渺氧,對(duì)象、正則蹬屹,因?yàn)榉祷氐亩际恰眔bject”
2)侣背、instanceof 檢測(cè)一個(gè)實(shí)例是否屬于某個(gè)類:
? ? 局限性:只要在當(dāng)前實(shí)例的原型鏈上,我們檢測(cè)出來的結(jié)果都是true慨默;
? ? ? ? ? ? 對(duì)于基本數(shù)據(jù)類型贩耐,字面量方式無法檢測(cè),可以檢測(cè)出實(shí)例創(chuàng)建的方式厦取,只有實(shí)例方式創(chuàng)建出來的才是標(biāo)準(zhǔn)的對(duì)象數(shù)據(jù)類型值潮太,也是Number這個(gè)類的一個(gè)實(shí)例
3)、constructor構(gòu)造函數(shù) 可以檢測(cè)基本數(shù)據(jù)類型虾攻;也可以檢測(cè)出是數(shù)組铡买、正則、對(duì)象 (正好解決了instanceof第一個(gè)局限 和typeof的局限)
? ? ? 局限性:如果把類的原型重寫 覆蓋掉 檢測(cè)結(jié)果就不準(zhǔn)確了
4)霎箍、Oject.prototype.toString.call()最全的方式
? ? ? [object object] 第一個(gè)object代表當(dāng)前實(shí)例是對(duì)象數(shù)據(jù)類型奇钞,
第二個(gè)object代表的是obj所屬的類是object
? ? ? toString方法:對(duì)于Number、String朋沮、Boolean蛇券、Array、RegExp樊拓、Date纠亚、Function原型上的toString方法都是把當(dāng)前當(dāng)前類型轉(zhuǎn)換成字符串的類型
? ? ? Object.prototype.toString不是用來轉(zhuǎn)換為字符串的
eg:
var arr=["a","b","c"]
console.log(Object.prototype.toString.call(arr)==="[object Array]")? //true
32、js數(shù)組主要有哪些方法:
Shift()筋夏、unshift()蒂胞、pop()、push()条篷、concat()骗随、splice(1,5)、slice()赴叹、reverse()鸿染、sort()
Map /forEach? indexOf /lastIndexOf? ? toString把數(shù)組轉(zhuǎn)換為字符串?
join按照分割符把數(shù)組中的每一項(xiàng)拼接成一個(gè)字符串
33、左邊固定 右邊自適應(yīng)的布局
方法一:左側(cè)設(shè)置左浮動(dòng)乞巧,右邊設(shè)置100%
方法二:flex布局
方法四涨椒、左側(cè)絕對(duì)定位 右側(cè)margin-left
34、本地存儲(chǔ)的方案
1>、傳統(tǒng):
? ? ? ? Cookie:把信息存儲(chǔ)到客戶端的瀏覽器中(但是項(xiàng)目服務(wù)器端也是可以獲取到cookie的)
? ? ? ? Session:把信息存儲(chǔ)到服務(wù)器上
2>蚕冬、html5:webstorage
? ? ? ? Localstorage:永久存儲(chǔ)到客戶端的本地
? ? ? ? SessionStorage:屬于臨時(shí)的會(huì)話存儲(chǔ)免猾,信息的會(huì)話存儲(chǔ),會(huì)話窗口存在信息存在囤热,會(huì)話窗口關(guān)閉信息就消失了猎提。
Cookie和localstorage的區(qū)別:
? ? ? -----存儲(chǔ)內(nèi)容的大小
? ? ? -----兼容性:cookie兼容所有瀏覽器,localstorage不兼容ie6-8
? ? ? ----存儲(chǔ)時(shí)間限制:cookie存儲(chǔ)的內(nèi)容有時(shí)間限制旁蔼,localstorage是 永久存儲(chǔ)到本地
? ? ? -----用戶可能出于安全的角度禁用cookie(無痕瀏覽器)但是不能禁止localstorage
? ? ------應(yīng)用:cookie用于存儲(chǔ)用戶名密碼锨苏,localstorage用于存儲(chǔ)js、css源代碼
34棺聊、手機(jī)網(wǎng)站遇到的兼容性問題
1>蚓炬、網(wǎng)站的頭部或者底部使用了positon定位,如果定位區(qū)域還要調(diào)取鍵盤的話就會(huì)出現(xiàn)很多問題躺屁,因?yàn)橐苿?dòng)端瀏覽器對(duì)手機(jī)都支持不好。解決:這個(gè)問題就是不用position定位经宏,使用局部滾動(dòng)isscroll.js
2>犀暑、移動(dòng)端使用click會(huì)存在300ms延遲:瀏覽器在第一次點(diǎn)擊結(jié)束會(huì),還需要等到300ms看是否觸發(fā)第二次點(diǎn)擊烁兰,如果觸發(fā)了第二次點(diǎn)擊就與click事件了耐亏。解決:用fastclick.js或者用zepto.js的touch模塊
3>、對(duì)于非可點(diǎn)元素如(select沪斟、span)監(jiān)聽click事件广辰,ios下不會(huì)觸發(fā),css增加cursor:pointer即可
4>主之、在ios和andriod中择吊,audio、video元素?zé)o法自動(dòng)播放:給html綁定touchstarch事件
35槽奕、manifest離線存儲(chǔ) 怎么刷新几睛?
用戶清空緩存;manifest文件被修改粤攒;由程序來更新
36所森、webpack是做什么用的?
Webpack是一個(gè)模塊打包器夯接,
將多種靜態(tài)資源js焕济、css、less換成一個(gè)靜態(tài)文件盔几,減少了頁(yè)面請(qǐng)求晴弃,
Webpack本身只能處理javascript文件,如果要處理其他類型的文件,就需要使用loader進(jìn)行轉(zhuǎn)換
37肝匆、實(shí)現(xiàn)不定高度元素垂直居中的幾種方法 其中有個(gè)flex
參考網(wǎng)址:https://mobile.tangshuang.net/3197.html
方法一:
Parent{? Position:relative }
Child{ Position:absolute;Top:50%;Transform:translateY(-50%)}
方法二:flex方法
.container { display: flex; align-items: center; justify-content: center;}
<div class="container">??
<div class="inner">
? ? ? ? this is a box fixed in center of screen<br>The second line
</div>
</div>
簡(jiǎn)單解釋一下粒蜈,當(dāng)display: flex時(shí),表示該容器內(nèi)部的元素將按照flex進(jìn)行布局旗国。align-items: center表示這些元素將相對(duì)于本容器水平居中枯怖,justify-content: center也是同樣的道理垂直居中。對(duì).container賦予了這些樣式之后能曾,作為它的內(nèi)部元素.inner自己自覺的居中了度硝。而且這里你會(huì)發(fā)現(xiàn),由于沒有使用text-align: center寿冕,.inner里面的文字是不會(huì)居中的蕊程,也就是說僅僅.inner這個(gè)容器居中而已。
38驼唱、浮動(dòng)元素垂直居中:
1藻茂、(父盒子有寬高)父元素為position:relative? 子元素:position:absolute;? top:50%; left:50%;margin-left:-寬度一半
2、(父盒子沒有寬高) 父元素為position:relative? 子元素:position:absolute;? margin:auto; top:0;left:0;right:0;bottom:0
39玫恳、寫出你所知道的css選擇器
參考網(wǎng)址:https://m.baidu.com/from=1013672b/bd_page_type=1/ssid=0/uid=0/pu=usm%402%2Csz%401320_1004%2Cta%40iphone_2_7.1_11_9.2/baiduid=FF28D2DDA660A06D0F18E70D2FBBBD3F/w=0_10_/t=iphone/l=3/tc?ref=www_iphone&lid=6332165674989771974&order=2&fm=alop&isAtom=1&is_baidu=0&tj=www_normal_2_0_10_title&vit=osres&m=8&srd=1&cltj=cloud_title&asres=1&title=CSS%E9%80%89%E6%8B%A9%E5%99%A8%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C&dict=32&wd=&eqid=57e05f21d4afdc00100000035bf2318b&w_qd=IlPT2AEptyoA_yi7D6EouwmuJExSm7ooqjwYpePUuAG&tcplug=1&sec=34299&di=4324426a0babbe3e&bdenc=1&nsrc=IlPT2AEptyoA_yixCFOxXnANedT62v3IEQGG_zcHATm7ok_rxP4kHRhdXHKhVniJEFPwwiPQpsxCg6fcOjpzidYYbu6qgihf
1>辨赐、標(biāo)簽選擇器:p{list-style:none}
2>、類class選擇器 .box{width:100px}
3>京办、id選擇器? #box{width:100px}
4>掀序、通配符選擇器(*) *{margin:0}
5>、組合選擇器 .box,.header{}
6>惭婿、后代選擇器 li a{}
7>不恭、子選擇器ul > li
8>、偽類選擇器:a標(biāo)簽里的hover,active,link,visited
9>财饥、相鄰選擇器(h1+p)
10>换吧、屬性選擇器(a[rel="external"])
a[src^=”https”] 選擇其src屬性值以”https”開頭的每個(gè)元素
a[src$=”.pdf”] 選擇其src屬性值以”.pdf”結(jié)尾的所有元素
a[src*=”abc”] 選擇其src屬性中包含”abc”子串的每個(gè)元素
哪些屬性可以繼承?
Font-family佑力、font-size式散、font-style、color打颤、line-height暴拄、list-style、text-indent编饺、text-align...
哪些屬性不可繼承
Margin? border width height padding background position left right top bottom...
優(yōu)先級(jí)的算法:
用!import可以改變優(yōu)先級(jí)別為最高乖篷,其次是style對(duì)象,然后是 id>class>tag,另外同級(jí)樣式按照聲明的順序后出現(xiàn)的順序具有最高優(yōu)先級(jí)
40透且、編寫一個(gè)類和類繼承撕蔼,類名為Person豁鲤,含有屬性?name,age,含有方法sayhello,編寫一個(gè)Student類鲸沮,繼承自Person琳骡,自由屬性score,自有方法study
41讼溺、什么叫做類數(shù)組
類數(shù)組是對(duì)象數(shù)據(jù)類型的楣号。
以正整數(shù)作為索引,索引逐級(jí)遞增怒坯,索引代表的是當(dāng)前對(duì)應(yīng)的某一個(gè)元素炫狱。
還有一個(gè)length的屬性代表類數(shù)組的個(gè)數(shù)
通過getElementsByTagName getElementByClassName 獲取的都是類數(shù)組 函數(shù)里的arguments
42、字符串的方法 String
1.charAt(索引) 獲取指定索引位置的字符? str.charAt(8)
2.subStr(n,m) 從索引開始截取m個(gè)
3.SubString(n,m)從索引n開始找到索引為m處(不包含m)剔猿,把找到的以字符串方式返回
4.slice(n,m) 從索引n開始找到索引為m處(不包含m)视译,把找到的以字符串方式返回 支持負(fù)數(shù)作為索引
5.indexOf/lastIndexOf? ? str.indexOf(“!")
6、toLoweCase/toUpperCase
7.replace 替換? str.replace(“l(fā)iu”,”劉”)? str.replace(“/liu/g”,”劉”) 在不適用正則的情況下只能替換一次
8. split 按照指定字符 分割成數(shù)組(例如時(shí)間的格式化)
43归敬、獲取[n-m]之間的隨機(jī)整數(shù)
Math.round(Math.random()*(m-n)+n)
44酷含、ajax屬性jquery
type 請(qǐng)求方式 get post
datatype 服務(wù)器返回的數(shù)據(jù)類型xml html script jsonp json text
contentType 默認(rèn)值: "application/x-www-form-urlencoded"。發(fā)送信息至服務(wù)器時(shí)內(nèi)容編碼類型汪茧。
beforeSend
在發(fā)送請(qǐng)求之前調(diào)用第美,并且傳入一個(gè) XMLHttpRequest 作為參數(shù)。
45陆爽、事件流分為哪幾個(gè)階段
捕獲階段:從外向里依次查找元素
目標(biāo)階段:當(dāng)前事件源本身的操作
冒泡階段:從內(nèi)到外一次觸發(fā)相關(guān)的行為(我們最常用的就是冒泡階段)
DOM0級(jí)事件只能這些方法在冒泡階段執(zhí)行,怎么控制在捕獲階段完成扳缕,我們用DOM2級(jí)事件
? addEventListener-->第一個(gè)參數(shù)是行為的類型慌闭, 第二個(gè)參數(shù)是給當(dāng)前的綁定的方法,第三個(gè)參數(shù)是控制在哪個(gè)階段發(fā)生:true 在捕獲階段發(fā)生 false在冒泡階段發(fā)生
? document.body.addEventListener("click",function(){
? ? ? console.log("body");
? },false);
46躯舔、編寫一個(gè)復(fù)制對(duì)象值的方法
參考網(wǎng)址:https://www.cnblogs.com/libin-1/p/6845458.html
復(fù)制對(duì)象有 淺復(fù)制驴剔、深復(fù)制。
淺復(fù)制:沒有辦法真正復(fù)制一個(gè)對(duì)象粥庄,只是保存了該對(duì)象的引用地址,一旦原對(duì)象的值改變布讹,復(fù)制的對(duì)象值也會(huì)改變
深復(fù)制可以實(shí)現(xiàn)真正的復(fù)制一個(gè)對(duì)象训堆。
淺復(fù)制方法:Es6里Object.assign的第一個(gè)參數(shù)是目標(biāo)對(duì)象可以是一個(gè)或者多個(gè)
Let target={a:123};
Let source1={b:456};
Let source2={c:789,d:{e:”lovely”}}
Left obj=Object.assign(target,source1,source2);
Console.log(obj)==>{a:123,b:456,c:789,d:{e:”lovely”}}
Source2.d.e=”hello”;
Console.log(obj)==>{a:123,b:456,c:789,d:{e:”hello”}}//源對(duì)象改變描验,它也改變了
深復(fù)制方法:先將對(duì)象轉(zhuǎn)換成字符串 再將字符串轉(zhuǎn)換成對(duì)象
let source2={c:789,d:{e:"lovely"}}
let obj2=JSON.parse(JSON.stringify(source2));源對(duì)象怎么改都不會(huì)影響到它
(還可以用遞歸編寫一個(gè)方法)
47坑鱼、box-sizing屬性
box-sizing屬性包括content-box(default),border-box,padding-box呼股。
?????1耕魄、content-box吸奴,border和padding不計(jì)算入width之內(nèi)
?????2马靠、padding-box甩鳄,padding計(jì)算入width內(nèi)
?????3、border-box档泽,border和padding計(jì)算入width之內(nèi)揖赴,
48燥滑、頁(yè)面渲染過程?
參考網(wǎng)址:https://m.jb51.net/show/105026
1.解析HTML文件,創(chuàng)建DOM樹
自上而下赃蛛,遇到任何樣式(link呕臂、style)與腳本(script)都會(huì)阻塞(外部樣式不阻塞后續(xù)外部腳本的加載)肪跋。
2.解析CSS
優(yōu)先級(jí):瀏覽器默認(rèn)設(shè)置<用戶設(shè)置<外部樣式<內(nèi)聯(lián)樣式<HTML中的style樣式州既;
3.將CSS與DOM合并,構(gòu)建渲染樹(renderingtree)
DOM樹與HTML一一對(duì)應(yīng)褥琐,渲染樹會(huì)忽略諸如head晤郑、display:none的元素
4.布局和繪制,重繪(repaint)和重排(reflow)
重排:若渲染樹的一部分更新吭练,且尺寸變化析显,就會(huì)發(fā)生重排;
重繪:部分節(jié)點(diǎn)需要更新分尸,但不改變其他集合形狀箩绍。如改變某個(gè)元素的顏色尺上,就會(huì)發(fā)生重繪怎抛。
49、Jquery上獲取寬度的三個(gè)函數(shù)?
width()返回元素的寬度
innerWidth()返回元素的寬度 包括內(nèi)邊距
outerWidth()返回元素的寬度 包括內(nèi)邊距和邊框
outerWidth(true)返回元素的寬度 包括內(nèi)邊距豆赏、邊框河绽、外邊距
50、Jquery上兩種擴(kuò)展方法
參考網(wǎng)址 https://www.cnblogs.com/gaoyukun/p/8823549.html
$.extend();
? (function(){
$.txtend({
? get:function(name){
Console.log(name);
}
})
})();
調(diào)用的時(shí)候 $.get(“l(fā)iu”);? //調(diào)用時(shí)直接$.函數(shù)名(參數(shù));
$.fn.extend();
?(function(){
$.fn.extend({
get:function(name){
Console.log(name);
}
})
})()
$(“button”).get(“l(fā)iu”);? /調(diào)用時(shí)要$(標(biāo)簽名).函數(shù)名();