Js面试题(总结)持续取经更新……
目錄
1、面向?qū)ο蟮奶卣饔心男┓矫?/p>
2、string是最基本的數(shù)據(jù)類型嗎?
3、float f=3.4是否正確
4、&和&&的區(qū)別
5、Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?
6、switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?
7、用最有效率的方法計(jì)算2乘以8?
8、數(shù)組有沒(méi)有l(wèi)ength()方法?String有沒(méi)有l(wèi)ength()方法?
9、構(gòu)造器(constructor)是否可被重寫(xiě)(override)?
10、是否可以繼承String類?
11.GC是什么?為什么要有GC?
12.String s = new String(“xyz”);創(chuàng)建了幾個(gè)字符串對(duì)象?
13.Java 中的final關(guān)鍵字有哪些用法?
14.數(shù)據(jù)類型之間的轉(zhuǎn)換:- 如何將字符串轉(zhuǎn)換為基本數(shù)據(jù)類型?- 如何將基本數(shù)據(jù)類型轉(zhuǎn)換為字符串
15.如何實(shí)現(xiàn)字符串的反轉(zhuǎn)及替換?
16.如何解決跨域
17.數(shù)組(array)方法
18.js數(shù)組和對(duì)象的遍歷方式
19.==和===的區(qū)別
20.關(guān)于閉包
21.let和const的區(qū)別是什么
22.垃圾回收機(jī)制
23.數(shù)組去重的幾種方法
24.父子組件傳參
25.HTML5的特性
26.頁(yè)面之間是怎么傳參數(shù)的
27.如何在瀏覽器查看和清楚localstorage保存的數(shù)據(jù)
29.css的繼承選擇器 .one ,two?和.one>.two的區(qū)別?兩個(gè)同級(jí)類選擇器連著一起寫(xiě)有什么作用
30.如何實(shí)現(xiàn)水平垂直居中
31.CSS的幾種居中方式
32.fixed和absolute的區(qū)別
33.css有哪些選擇符?可繼承的屬性有哪些?css3新增的偽元素有哪些?css優(yōu)先級(jí)的計(jì)算
34.css3的新特性
text-decoration
顏色
?35.?移入圖片讓那個(gè)圖片慢慢放大
36.call(),apply(),bind()的區(qū)別
37.const的用法
38.Utf-8編碼漢字占多少個(gè)字節(jié)
39.關(guān)于ajax
40.js對(duì)數(shù)組的操作,包括向數(shù)組中插入刪除數(shù)據(jù)
41.promise是什么?能解決什么問(wèn)題?
?42.編程:連接兩個(gè)數(shù)組并返回?
43.冒泡排序
?編輯
44.ES6新特性
45.js對(duì)數(shù)組有哪些操作方法
46.js的選擇器
47.js的數(shù)據(jù)類型
?48.減少頁(yè)面加載時(shí)間的方法
49.怎么理解模塊化開(kāi)發(fā)
?50.什么是閉包,有什么作用?
51.手機(jī)號(hào)的正則表達(dá)式(以1開(kāi)頭的11位數(shù)字)
1、面向?qū)ο蟮奶卣饔心男┓矫?/h3>
--抽象:抽象是將一類對(duì)象的共同特征總結(jié)溝造出來(lái)的過(guò)程,包括數(shù)據(jù)抽象和行為抽象兩方面,抽象只關(guān)注對(duì)象有哪些行為或者屬性,并不關(guān)注這些行為的細(xì)節(jié)是什么。
--繼承:繼承是從已有類型得到繼承信息創(chuàng)建新類的過(guò)程,提供繼承的類叫父類(超類,基類)、得到繼承的類叫子類(派生類)
--封裝:通常認(rèn)為封裝是把數(shù)據(jù)的操作和操作數(shù)據(jù)的方法綁定起來(lái),對(duì)數(shù)據(jù)的訪問(wèn)只能童工已經(jīng)定義的接口,可以說(shuō)封裝就是隱藏一切可以隱藏的東西,只向外界提供最簡(jiǎn)單的編程接口。舉例:可以想想普通洗衣機(jī)和全自動(dòng)洗衣機(jī)的差別,明顯全自動(dòng)洗衣機(jī)封裝更好因此操作起來(lái)更簡(jiǎn)單;我們現(xiàn)在使用的智能手機(jī)也是封裝得足夠好的,因?yàn)閹讉€(gè)按鍵就搞定了所有的事情)。
--多態(tài)性:多態(tài)性是指允許不同子類型的對(duì)象對(duì)同一消息做出的不同的響應(yīng),簡(jiǎn)單的說(shuō)就是用同樣的對(duì)象引用調(diào)用同樣的方法但是做了不同的事情,實(shí)現(xiàn)多態(tài)需要做兩件事:1、方法重寫(xiě)(子類繼承父類并重寫(xiě)父類中的方法)2、對(duì)象造型(父類引用子類型對(duì)象,這樣同樣的引用調(diào)用的方法就會(huì)根據(jù)子類型的不同而表現(xiàn)出不同的行為)
2、string是最基本的數(shù)據(jù)類型嗎?
答:不是,Java中的基本數(shù)據(jù)類型有8個(gè):byte、short、int、long、float、double、char、boolean;除了基本類型(primitive)和枚舉類型(enumeration type),剩下的都是引用類型(reference type)
3、float f=3.4是否正確
答:不正確,3.4是雙精度數(shù),將雙精度型(double)賦值給浮點(diǎn)型(float)屬于下轉(zhuǎn)型(down--casting,也稱之為窄化)會(huì)造成精度損失,因此需要強(qiáng)制轉(zhuǎn)換float f=(float)3.4;或者寫(xiě)成float f=3.4F
4、&和&&的區(qū)別
雖然二者都要求運(yùn)算符左右兩端的布爾值都是true整個(gè)表達(dá)式的值才是true。&&之所以稱為短路運(yùn)算是因?yàn)?#xff0c;如果&&左邊的表達(dá)式的值是false,右邊的表達(dá)式會(huì)被直接短路掉,不會(huì)進(jìn)行運(yùn)算。很多時(shí)候我們可能都需要用&&而不是&,例如在驗(yàn)證用戶登錄時(shí)判定用戶名不是null而且不是空字符串,應(yīng)當(dāng)寫(xiě)為:username != null &&!username.equals(“”),二者的順序不能交換,更不能用&運(yùn)算符,因?yàn)榈谝粋€(gè)條件如果不成立,根本不能進(jìn)行字符串的equals比較,否則會(huì)產(chǎn)生NullPointerException異常。注意:邏輯或運(yùn)算符(|)和短路或運(yùn)算符(||)的差別也是如此。
5、Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?
Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在參數(shù)上加0.5然后進(jìn)行下取整。
6、switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?
expr可以是byte、short、char、int、enum、String類型,但是long類型不能
7、用最有效率的方法計(jì)算2乘以8?
答: 2 << 3(左移3位相當(dāng)于乘以2的3次方,右移3位相當(dāng)于除以2的3次方)
8、數(shù)組有沒(méi)有l(wèi)ength()方法?String有沒(méi)有l(wèi)ength()方法?
答:數(shù)組沒(méi)有l(wèi)ength()方法,有l(wèi)ength 的屬性。String 有l(wèi)ength()方法。JavaScript中,獲得字符串的長(zhǎng)度是通過(guò)length屬性得到的,這一點(diǎn)容易和Java混淆
9、構(gòu)造器(constructor)是否可被重寫(xiě)(override)?
答:構(gòu)造器不能被繼承,因此不能被重寫(xiě),但可以被重載。
10、是否可以繼承String類?
答:String 類是final類,不可以被繼承。
11.GC是什么?為什么要有GC?
答:GC是垃圾收集的意思,垃圾回收可以有效的防止內(nèi)存泄露,有效的使用可以使用的內(nèi)存
12.String s = new String(“xyz”);創(chuàng)建了幾個(gè)字符串對(duì)象?
答:兩個(gè)對(duì)象,一個(gè)是靜態(tài)區(qū)的”xyz”,一個(gè)是用new創(chuàng)建在堆上的對(duì)象。
13.Java 中的final關(guān)鍵字有哪些用法?
(1)修飾類:表示該類不能被繼承;(2)修飾方法:表示方法不能被重寫(xiě);(3)修飾變量:表示變量只能一次賦值以后值不能被修改(常量)。
14.數(shù)據(jù)類型之間的轉(zhuǎn)換:
- 如何將字符串轉(zhuǎn)換為基本數(shù)據(jù)類型?
- 如何將基本數(shù)據(jù)類型轉(zhuǎn)換為字符串
答:?
- 調(diào)用基本數(shù)據(jù)類型對(duì)應(yīng)的包裝類中的方法parseXXX(String)或valueOf(String)即可返回相應(yīng)基本類型;?
- 一種方法是將基本數(shù)據(jù)類型與空字符串(”")連接(+)即可獲得其所對(duì)應(yīng)的字符串;另一種方法是調(diào)用String 類中的valueOf()方法返回相應(yīng)字符串
15.如何實(shí)現(xiàn)字符串的反轉(zhuǎn)及替換?
答:方法很多,可以自己寫(xiě)實(shí)現(xiàn)也可以使用String或StringBuffer/StringBuilder中的方法
有一道很常見(jiàn)的面試題是用遞歸實(shí)現(xiàn)字符串反轉(zhuǎn),代碼如下所示:
16.如何解決跨域
1、jsonp跨域
2.document.domain+iframe跨域
3.node?js中間件代理跨域
4.后端在頭部信息里面設(shè)置安全域名
17.數(shù)組(array)方法
map:遍歷數(shù)組,返回回調(diào)返回值組成的新數(shù)組
foeeach:無(wú)法break,可以用try或者catch中throw?new?error來(lái)停止
filter:過(guò)濾
some:有一項(xiàng)true,則整體返回true
every:有一項(xiàng)返回false,則整體返回false
join:通過(guò)置頂連接符生成字符串
push /?pop:末尾推入和彈出,改變?cè)瓟?shù)組,返回推入/彈出項(xiàng)
unshift /?shift:頭部推入和彈出,改變?cè)瓟?shù)組,返回操作項(xiàng)
sort(fn) /? reverse:排序與反轉(zhuǎn),改變?cè)瓟?shù)組
concat:連接數(shù)組,不影響數(shù)組,淺拷貝
slice(start,end):返回截?cái)嗪蟮男聰?shù)組,不改變?cè)瓟?shù)組
splice(start,number,value):返回刪除數(shù)組組成的數(shù)組,value插入項(xiàng)
indexof /?lastIndexOf(value,fromindex):查找數(shù)組項(xiàng),返回對(duì)應(yīng)的下標(biāo)
reduce /?reduceRignt(fn(prev,cur),defaultprev):兩兩執(zhí)行,prev為上次化簡(jiǎn)函數(shù)的ret
18.js數(shù)組和對(duì)象的遍歷方式
1.for?in
2.for
3.foreach
4.for-fof
19.==和===的區(qū)別
==是非常嚴(yán)格意義上的相等,值相等就相等
===是嚴(yán)格意義上的相等,回你比較兩邊的數(shù)據(jù)類型和值的大小
值的引用地址都相等才相等
20.關(guān)于閉包
閉包就是能夠讀取到其他函數(shù)內(nèi)部變量的函數(shù)
閉包基本上就是一個(gè)函數(shù)內(nèi)部返回的一個(gè)函數(shù)
優(yōu)點(diǎn):
1.可以讀取函數(shù)內(nèi)部的變量
2.將變量始終保持在內(nèi)存中
3.可以封裝對(duì)象的私有屬性和私有方法
缺點(diǎn):
比較耗費(fèi)內(nèi)存,使用不當(dāng)會(huì)造成內(nèi)存溢出的問(wèn)題
21.let和const的區(qū)別是什么
let命令不存在變量提升,如果在let前使用,會(huì)導(dǎo)致報(bào)錯(cuò)
如果塊區(qū)中存在let和const命令,就會(huì)形成封閉作用域
不允許重復(fù)聲明
const定義的是常量,不能修改,但是如果定義的是對(duì)象,可以修改對(duì)象內(nèi)部的數(shù)據(jù)
22.垃圾回收機(jī)制
什么是垃圾回收
垃圾回收:古茗司儀?就是釋放占用的空間,防止內(nèi)存泄露
哪些需要回收:對(duì)象是否可以被回收的兩種經(jīng)典算法:引用計(jì)數(shù)法和可達(dá)性分析算法
什么時(shí)候回收:堆的新生代,老年代,永久代的垃圾回收時(shí)機(jī),minorGC和FullGC
如何回收:三種經(jīng)典垃圾回收算法-標(biāo)記清除算法,復(fù)制算法,標(biāo)記正路算法?及分帶收集算法
23.數(shù)組去重的幾種方法
1.定義一個(gè)新的數(shù)組,并放入原數(shù)組的第一個(gè)元素,然后將元素組一一和新數(shù)組的元素進(jìn)行對(duì)比,若不同則存放在新數(shù)組中
2.先將原數(shù)組排序,在與相鄰的進(jìn)行比較,如果不同則存入新數(shù)組中
?3.利用ES6的set方法
function?unique(arr){?
? ? ? ? set數(shù)據(jù)結(jié)構(gòu)?他類似于數(shù)組?其他成員的值都是唯一的
? ? ? ? return Array.from(new Set(arr));
? ? ? ? 利用Array.from?將set結(jié)構(gòu)轉(zhuǎn)化為數(shù)組
}
console.log(unique([1,1,1,2,2,3,3,4,5,6,7,7]))
輸出結(jié)果為:[1,2,3,4,5,6,7,]
24.父子組件傳參
父?jìng)髯?props?
在子組件中?使用選項(xiàng)props來(lái)聲明需要從父級(jí)接收到的數(shù)據(jù)
props的值有兩種方式
方式一:字符串?dāng)?shù)組,數(shù)組中的字符串就是傳遞時(shí)的名稱
方式二:對(duì)象,?對(duì)象可以設(shè)置傳遞時(shí)候的類型,也可以設(shè)置默認(rèn)值等
當(dāng)需要對(duì)props進(jìn)行類型驗(yàn)證等驗(yàn)證時(shí),需要對(duì)象寫(xiě)法?
驗(yàn)證支持的數(shù)據(jù)類型一般有以下幾種
string-Number-Boolean-Array-Object-Date-Function-Symbol
25.HTML5的特性
1.語(yǔ)言化標(biāo)簽
通過(guò)語(yǔ)言化標(biāo)簽?可以讓頁(yè)面又更加完善的結(jié)構(gòu)?讓頁(yè)面的元素有含義,同時(shí)也利于被搜索殷勤解析
有利于SEO?主要標(biāo)簽包括下面幾種
header-?表示文檔的頭部區(qū)域
footr-?表示標(biāo)簽的尾部區(qū)域
nav-表示文檔導(dǎo)航的部分
section-?表示文檔的某一節(jié)
article-?表示文章
main-?表示文檔主要的內(nèi)容區(qū)域
2.增強(qiáng)型表單
可以通過(guò)input的type屬性是定類型是number還是data或者url,同時(shí)還添加了placeholde和required等表單屬性
3.媒體元素
新增了audio和video兩個(gè)媒體相關(guān)標(biāo)簽,可以讓開(kāi)發(fā)人員不必依賴任何插件就能在網(wǎng)頁(yè)中嵌入瀏覽器的音頻?和視頻內(nèi)容
26.頁(yè)面之間是怎么傳參數(shù)的
1.cookie傳值
缺點(diǎn):cookie存儲(chǔ)是需要服務(wù)器支持,本地直接運(yùn)行靜態(tài)文件是實(shí)現(xiàn)不了的,cookie能夠存儲(chǔ)數(shù)據(jù)到客戶端的磁盤(pán)中,特定的網(wǎng)頁(yè)之間是可以共享cookie中的數(shù)據(jù)
2.LocalStorage和SessionStorage傳值
優(yōu)點(diǎn):支持本地靜態(tài)文件,在HTML5中?新加入了一個(gè)localstorage特性,。這個(gè)特性主要是用來(lái)作為本地存儲(chǔ)來(lái)使用的? 解決了cookie存儲(chǔ)空間不足的問(wèn)題 ,localstorage?中一般的瀏覽器支持的是5M?的大小?這個(gè)在不同的瀏覽器中l(wèi)ocalstorage會(huì)有所不同,比方類似的cookie?將數(shù)據(jù)存在一個(gè)公共的地方?實(shí)現(xiàn)頁(yè)面之間的傳值
3.get方法? url傳值
優(yōu)點(diǎn):速度快? cookie和localstorage都存在傳輸速度慢的情況?在一個(gè)頁(yè)面寫(xiě)進(jìn)去另一個(gè)頁(yè)面讀出來(lái)?有時(shí)候會(huì)讀到空值,post提交表單跳轉(zhuǎn)的方式就不行了? 因?yàn)榉?wù)端并不處理這些請(qǐng)求參數(shù)?連達(dá)到客戶端的機(jī)會(huì)都沒(méi)有
27.如何在瀏覽器查看和清楚localstorage保存的數(shù)據(jù)
首先?按下F12打開(kāi)開(kāi)發(fā)者工具?
點(diǎn)擊切換到application
點(diǎn)擊localstorage?就可以查看保存過(guò)的數(shù)據(jù)信息
?如何清楚數(shù)據(jù)
點(diǎn)擊上方的?clear?storage?點(diǎn)擊?clear?site?data?即可刪除數(shù)據(jù)
?28.display:none? 和visibility:hidden的區(qū)別
display:none? 和visibility:hidden?區(qū)別不僅僅在與?display:none? 隱藏后的元素不占用空間而visibility:hidden隱藏后元素依然占用空間??
visibility:hidden?具有繼承性? 給父元素設(shè)置visibility:hidden?子元素也會(huì)繼承這個(gè)屬性? 但是如果給子元素設(shè)置visibility:hidden?則子元素又會(huì)顯示出來(lái)? ?這個(gè)和display:none有這質(zhì)的區(qū)別:父元素設(shè)置display:none; 子元素設(shè)置display:block;后子元素不會(huì)顯示
并且visibility:hidden不會(huì)影響計(jì)時(shí)器的計(jì)數(shù) ,就算是隱藏?計(jì)時(shí)器依舊運(yùn)行? display:none?賊反之
29.css的繼承選擇器 .one ,two?和.one>.two的區(qū)別?兩個(gè)同級(jí)類選擇器連著一起寫(xiě)有什么作用
1.css的繼承選擇器? .one ,two?和.one>.two的區(qū)別
.one .two匹配 .one下所有包含.two的標(biāo)簽? 包含所有的后代元素
.one>.two?匹配.one?下子元素中包含.two?的標(biāo)簽? 只包含.one的子級(jí)元素
30.如何實(shí)現(xiàn)水平垂直居中
1、利用定位+margin:auto
父級(jí)設(shè)置為相對(duì)定位? 子級(jí)設(shè)置為絕對(duì)定位?并且四個(gè)定位屬性的值都設(shè)置了0 ,那么這時(shí)候如果子級(jí)沒(méi)有設(shè)置寬高,則會(huì)和父元素寬高相同? 完全覆蓋
2、利用定位+margin:負(fù)值
初始位置為方塊1的位置
當(dāng)設(shè)置left、top為50%的時(shí)候,內(nèi)部子元素為方塊2的位置
設(shè)置margin為負(fù)數(shù)時(shí),使內(nèi)部子元素到方塊3的位置,即中間位置
3、利用定位+transform
translate(-50%,-50%)將會(huì)將元素位子子級(jí)寬度高度的-50%
這種方法其實(shí)和最上面被否定掉的margin負(fù)值用法一樣,可以說(shuō)是margin負(fù)值的替代方案,并不需要知道自身元素的寬高
31.CSS的幾種居中方式
1.內(nèi)容居中
style=“text-align:center”
align=“center”
2.元素居中(只適合塊級(jí)元素)
先設(shè)置寬度再設(shè)置margin?padding
width:200px
margin:0px;
padding:0px;
3.垂直居中(只適合單獨(dú)一行垂直居中)
height和line-height設(shè)置成相同像素即可
line-height:40px;
height:40px;
4.內(nèi)邊距方式居中
借助?設(shè)置相同的上下內(nèi)邊距?實(shí)現(xiàn)垂直居中的閑過(guò)?可用在多行文本上
?5.table方式(使用與圖片居中)
首先通過(guò)display:table-cell
再借助單元格的垂直居中來(lái)達(dá)到效果
<style>
#d{
? ? ? ? display:table-cell;
? ? ? ? vertical-align:middle;
? ? ? ? height:200px;
}
div{
? ? ? ? border:solid 1px lightskyblue;
}
</style>
<div id="d">
? ? ? ? <img src="? ?">
</div>
32.fixed和absolute的區(qū)別
fixed:固定定位
absolute:絕對(duì)定位
區(qū)別:
1.沒(méi)有滾動(dòng)條的情況下并無(wú)差異
2.有滾動(dòng)條的情況下,fixed定位不會(huì)隨滾動(dòng)條的移動(dòng)而移動(dòng),而absolute則會(huì)隨著滾動(dòng)條的移動(dòng)而移動(dòng)
33.css有哪些選擇符?可繼承的屬性有哪些?css3新增的偽元素有哪些?css優(yōu)先級(jí)的計(jì)算
1.id選擇器 (#id)
2.類選擇器(.classname)
3.標(biāo)簽選擇器(div h1 p)
4.相鄰選擇器(h1+p)
5.子選擇器(ul>li)
6.后代選擇器(li a)
7.通配符選擇器(*)
8.屬性選擇器(a[rel="ex"])
9.偽類選擇器(a:hover)
可繼承:font-size? 、?font-family?color?
不可繼承:border 、padding、margin、width、height
優(yōu)先級(jí)就近原則-樣式定義最近者為準(zhǔn);*載入樣式以最后載入的定位為準(zhǔn);
優(yōu)先級(jí)順序?yàn)?#xff1a;!important>id>class>tagumportant比內(nèi)聯(lián)優(yōu)先級(jí)高
css3新增的偽類舉例
p:first-of-type? 選擇屬于其父級(jí)元素得到首個(gè)元素的每個(gè)元素
p:last-of-type選擇屬于其父元素的最后元素的每個(gè)元素
p:only-of-type選擇屬于其父元素唯一的元素的每個(gè)元素
p:only-child選擇屬于其父元素的唯一子元素的每個(gè)元素
p:nth-child(2)選擇屬于其父元素的第二個(gè)子元素的每個(gè)元素
:enabled、:disabled控制表單控件的禁用狀態(tài)。
:checked,單選框或復(fù)選框被選中。
34.css3的新特性
一、是什么
css,即層疊樣式表(Cascading Style Sheets)的簡(jiǎn)稱,是一種標(biāo)記語(yǔ)言,由瀏覽器解釋執(zhí)行用來(lái)使頁(yè)面變得更為美觀
二、選擇器
css3中新增了一些選擇器,主要為如下圖所示:
?三、新樣式
邊框
border-radius?創(chuàng)建圓角邊框
box-shadow?為元素添加陰影
border-image? 使用圖片來(lái)繪制邊框
box-shadow?設(shè)置元素陰影?設(shè)置屬性如下
水平陰影-垂直陰影-模糊距離-陰影尺寸-陰影顏色-內(nèi)外陰影
其中水平陰影和垂直陰影是必須設(shè)置的
背景
新增了幾個(gè)關(guān)于背景的屬性?分別是?background-clip、background-origin、background-size和background-break
用于確定背景畫(huà)區(qū),有以下幾種可可能的屬性
background-clip: border-box; 背景從border開(kāi)始顯示
background-clip: padding-box; 背景從padding開(kāi)始顯示
background-clip: content-box; 背景顯content區(qū)域開(kāi)始顯示
background-clip: no-clip; 默認(rèn)屬性,等同于border-box
通常情況,背景都是覆蓋整個(gè)元素的,利用這個(gè)屬性可以設(shè)定背景顏色或圖片的覆蓋范圍
text-overflow
text-overflow設(shè)置或者檢索當(dāng)當(dāng)前行超過(guò)指定容器的邊界時(shí)候?如何顯示屬性有兩種選擇
clip:修剪文本??
ellipsis:顯示省略符號(hào)來(lái)代表被修剪的文本
text-decoration
css3里面開(kāi)始支持對(duì)文字的更深層次的渲染,具體有三個(gè)屬性可供設(shè)置
text-fill-color? 設(shè)置文字內(nèi)部的填充顏色
text-stroke-color? 設(shè)置文字邊界的填充顏色
text-stroke-width?設(shè)置文字邊界的寬度
顏色
css3新增了新的顏色表示方式rgba與hala
rgba分為兩部分? rgb為顏色值 a為透明度
hala?分為四部分 h為色相 s為飽和度 l為亮度 a為透明度
五、transform 轉(zhuǎn)換
transform 轉(zhuǎn)換允許旋轉(zhuǎn)?縮放傾斜和平移元素
transform-origin? ?轉(zhuǎn)換元素位置(圍繞那個(gè)點(diǎn)進(jìn)行轉(zhuǎn)換)默認(rèn)值為(x,y,z:(50%,50%,0)
使用方式:
transform:translate(120px,50%)? ? 平移
transform:scale(2,0.5)縮放
transform:rotate(0.5turn)?旋轉(zhuǎn)
transform:skew(30deg,20deg)傾斜
六、animation動(dòng)畫(huà)
animation也有很多屬性
animation-name?動(dòng)畫(huà)名稱
animation-duration?動(dòng)畫(huà)持續(xù)時(shí)間
animation-timing-function? 動(dòng)畫(huà)時(shí)間函數(shù)
animation-delay?動(dòng)畫(huà)延遲時(shí)間
animation-iteration-count? 動(dòng)畫(huà)執(zhí)行次數(shù)?可以設(shè)置為一個(gè)證書(shū)?也可以設(shè)置為infinite(無(wú)限循環(huán))
animation-direction?動(dòng)畫(huà)執(zhí)行方向
animation-play-state?動(dòng)畫(huà)播放狀態(tài)
animation-fill-mode?動(dòng)畫(huà)填充模式
七、漸變
linear-gradient? 線性漸變
radial-gradient?徑向漸變
?35.?移入圖片讓那個(gè)圖片慢慢放大
<body>
? ? <div class="box">
? ? ? ? <div class="img">
? ? ? ? ? ? 圖片
? ? ? ? </div>
? ? </div>
</body>
?
<style>
? ? body {
? ? ? ? width: 100vw;
? ? ? ? height: 100vh;
? ? ? ? display: flex;
? ? ? ? justify-content: center;
? ? ? ? align-items: center;
? ? }
? ? .box {
? ? ? ? width: 300px;
? ? ? ? height: 300px;
? ? ? ? border: 1px solid black;
? ? ? ? position: relative;
? ? }
? ? .img {
? ? ? ? width: 300px;
? ? ? ? height: 300px;
? ? ? ? background-color: red;
? ? ? ? font-size: 24px;
? ? ? ? line-height: 300px;
? ? ? ? text-align: center;
? ? ? ? position: absolute;
? ? ? ? transform-origin: right center;
? ? ? ? animation: animate 3s linear;/*使用動(dòng)畫(huà)*/
? ? }
? ? /*圖片的運(yùn)動(dòng)動(dòng)畫(huà)*/
? ? @keyframes animate {
? ? ? ? from {
? ? ? ? ? ? transform: scale(0);
? ? ? ? ? ? left: -110%;
? ? ? ? }
? ? ? ? to {
? ? ? ? ? ? transform: scale(1);
? ? ? ? ? ? left: 0;
? ? ? ? }
? ? }
</style>
36.call(),apply(),bind()的區(qū)別
call 、bind 、 apply?這三個(gè)函數(shù)的第一個(gè)參數(shù)都是?this?的指向?qū)ο?#xff0c;第二個(gè)參數(shù)差別就來(lái)了
call的參數(shù)是直接放進(jìn)去的,第二個(gè)第三個(gè)第N個(gè)參數(shù)全都是用逗號(hào)分隔,直接放到后面
apply的所有參數(shù)必須放在一個(gè)數(shù)組里面?zhèn)鬟M(jìn)去
bind?除了返回的函數(shù)以外,他的參數(shù)和call一樣
37.const的用法
第一、常變量
void?main(void){
? ? ? ? const?int i=10;// i和j都用作常變量
? ? ? ? int? const j=20;
? ? ? ? i=15;? //錯(cuò)誤? ?常量不能改變
? ? ? ? j=25; //錯(cuò)誤? ?常量不能改變
}
第二、指針
const跟指針一起使用的時(shí)候有兩種方法
con示意圖可用來(lái)限制指針不可變,也就是說(shuō)指針指向的內(nèi)存地址不可變?但可以隨意改變?cè)摰刂分赶虻膬?nèi)存的內(nèi)容
38.Utf-8編碼漢字占多少個(gè)字節(jié)
英文字母和中文漢字在不同字符集編碼下的字節(jié)數(shù)
英文字母:
字節(jié)數(shù):1? ? ?編碼:GB2312
字節(jié)數(shù):1? ? ?編碼:GBK
字節(jié)數(shù):1? ? ?編碼:GB18030
字節(jié)數(shù):1? ? ?編碼:ISO-8859-1
字節(jié)數(shù):1? ? ?編碼:UTF-8
字節(jié)數(shù):4? ? ?編碼:UTF-16
字節(jié)數(shù):2? ? ?編碼:UTF-16BE
字節(jié)數(shù):2? ? ?編碼:UTF-16LE
中文漢字:
字節(jié)數(shù):2? ?編碼:GB2312
字節(jié)數(shù):2? ?編碼:GBK
字節(jié)數(shù):2? ?編碼:GB18030
字節(jié)數(shù):1? ?編碼:ISO-8859-1
字節(jié)數(shù):3? ?編碼:UTF-8
字節(jié)數(shù):4? ?編碼:UTF-16
字節(jié)數(shù):2? ?編碼:UTF-16BE
字節(jié)數(shù):2? ?編碼:UTF-16LE
39.關(guān)于ajax
定義:
ajax:即異步Javascript和XML? ajax是一種用于創(chuàng)建快速動(dòng)態(tài)網(wǎng)頁(yè)的技術(shù),通過(guò)在后臺(tái)與服務(wù)器進(jìn)行少量的數(shù)據(jù)交換,ajax可以使網(wǎng)頁(yè)實(shí)現(xiàn)異步更新?這意味著可以在不重新加載整個(gè)網(wǎng)頁(yè)的情況下?對(duì)網(wǎng)頁(yè)得到某部分進(jìn)行更新,而傳統(tǒng)網(wǎng)頁(yè)(不使用ajax)如果需要更新內(nèi)容則需要重新加載整個(gè)網(wǎng)頁(yè)
同步與異步的區(qū)別
同步提交:當(dāng)用戶發(fā)送請(qǐng)求時(shí),當(dāng)頁(yè)面不可以使用,服務(wù)器響應(yīng)頁(yè)面到客戶端,響應(yīng)完成,用戶才可以使用頁(yè)面
異步提交:當(dāng)用戶發(fā)送請(qǐng)求?當(dāng)前頁(yè)面可以繼續(xù)使用 ,當(dāng)異步請(qǐng)求的數(shù)據(jù)響應(yīng)給頁(yè)面,頁(yè)面吧數(shù)據(jù)顯示出來(lái)
ajax的工作原理
客戶端發(fā)送請(qǐng)求,請(qǐng)求交給XHR,xhr把請(qǐng)求提交給服務(wù),服務(wù)器進(jìn)行業(yè)務(wù)處理,服務(wù)器響應(yīng)數(shù)據(jù)交給xhr對(duì)象,xhr對(duì)象接收數(shù)據(jù),由JavaScript把數(shù)據(jù)寫(xiě)到頁(yè)面上;如下圖所示
實(shí)現(xiàn)ajax的基本步驟
要完整的實(shí)現(xiàn)一個(gè)ajax異步調(diào)用和局部刷新,通常需要一下幾個(gè)步驟
1.創(chuàng)建xmlhttpRequest對(duì)象,也就是創(chuàng)建一個(gè)異步調(diào)用的對(duì)象
2.創(chuàng)建一個(gè)新的http請(qǐng)求,并指定該請(qǐng)求得到方法,url及驗(yàn)證信息
創(chuàng)建http請(qǐng)求可以使用XMLHttpRequest對(duì)象的open()方法,語(yǔ)法代碼如下
XMLHttpRequest.open(method,URL,flag,name,password);
代碼中的參數(shù)解釋如下所示
method:該參數(shù)用于指定http的請(qǐng)求方法,一共有g(shù)et,post,head,put,delete五種方法
url:該參數(shù)用于指定http請(qǐng)求的URL地址,可以使絕對(duì)的URL,也可以是相對(duì)的URL
flag:該參數(shù)為可選,參數(shù)為布爾型,該參數(shù)用于指定是否使用異步方式,true表示異步,false表示同步,默認(rèn)為true
name:該參數(shù)為可選參數(shù),用于輸入用戶名?如果服務(wù)器需要驗(yàn)證? 則必須使用該參數(shù)
password:該參數(shù)為可選,用于輸入密碼。若服務(wù)器需要驗(yàn)證,則必須有該參數(shù)
3.設(shè)置響應(yīng)http請(qǐng)求狀態(tài)變化的函數(shù)
4.發(fā)送http請(qǐng)求
在經(jīng)過(guò)以上幾個(gè)步驟的設(shè)置之后,就可以將HTTP請(qǐng)求發(fā)送到Web服務(wù)器上去了。發(fā)送HTTP請(qǐng)求可以使用XMLHttpRequest對(duì)象的send()方法,其語(yǔ)法代碼如下
XMLHttpRequest.send(data);
5.獲取異步調(diào)用返回的數(shù)據(jù)
如果XMLHttpRequest對(duì)象的readyState屬性值等于4,表示異步調(diào)用過(guò)程完畢,就可以通過(guò)XMLHttpRequest對(duì)象的responseText屬性或responseXml屬性來(lái)獲取數(shù)據(jù)
但是,異步調(diào)用過(guò)程完畢,并不代表異步調(diào)用成功了,如果要判斷異步調(diào)用是否成功,還要判斷XMLHttpRequest對(duì)象的status屬性值,只有該屬性值為200,才表示異步調(diào)用成功,因此,要獲取服務(wù)器返回?cái)?shù)據(jù)的語(yǔ)句,還必須要先判斷XMLHttpRequest對(duì)象的status屬性值是否等于200,如以下代碼所示
6.使用JavaScript和DOM實(shí)現(xiàn)局部刷新
40.js對(duì)數(shù)組的操作,包括向數(shù)組中插入刪除數(shù)據(jù)
1.檢查數(shù)組的API代碼如下
<script>
let?value=[1,2,3,4,5,6]
console.log(Array.isArray(value))? //?輸出為true
</script>
2.轉(zhuǎn)換方法將數(shù)組array轉(zhuǎn)換為以逗號(hào)隔開(kāi)的字符串
<script>
let?array=['你好','hello','世界','word'];
console.log(array.toString())? //?輸出為? ? 你好,hello,世界嗎,Word
</script>
3.棧,隊(duì)列方法分別實(shí)現(xiàn)先進(jìn)先出,后進(jìn)先出的效果
<script>
? ? ? ? let?array = [1,2,3,4,5];
? ? ? ? array.push(6);? //將6壓入數(shù)組?從后開(kāi)始
? ? ? ? console.log(array)? //輸出為123456
? ? ? ? array.unshift(0)? //將0放入在數(shù)組的最前面
? ? ? ? console.log(array)? //輸出為0123456
? ? ? ? array.shift()? //刪除第一個(gè)? ?輸出結(jié)果為123456(刪除了0)
? ? ? ? array.pop? //?刪除末尾一個(gè)? ? 輸出結(jié)果為12345(刪除了6)
</script>
?4.重排序方法,sort方法根據(jù)設(shè)定的規(guī)則進(jìn)行排序(如果調(diào)用該方法時(shí)沒(méi)有使用參數(shù),將按字母順序?qū)?shù)組中的元素進(jìn)行排序,說(shuō)得更精確點(diǎn),是按照字符編碼的順序進(jìn)行排序。要實(shí)現(xiàn)這一點(diǎn),首先應(yīng)把數(shù)組的元素都轉(zhuǎn)換成字符串(如有必要),以便進(jìn)行比較。)reverse進(jìn)行倒敘
<script>
? ? ? ? let?array = [1,2,4,10,20,50,6,8,9]
????????console.log(array.sort())? //輸出為[1,10,2,20,4,50,6,8,9]
? ? ? ? 此時(shí)并不是從大大小排列,?sort自帶的接口可以實(shí)現(xiàn)此功能
? ? ? ? array.sort(function(a,b){
? ? ? ? return a-b
})
console.log(array)? //輸出為[1,2,4,6,8,9,10,20,50]
array.sort(function(a,b){
? ? ? return b-a
? ? })
? ? console.log(array);//輸出為[50, 20, 10, 9, 8, 6, 4, 2, 1]可以實(shí)現(xiàn)倒敘的方法
? ? array.reverse();
? ? console.log(array)//reverse也可以實(shí)現(xiàn)倒敘排列的方法
</script>
5.concat用于連接字符串并建立副本? slice方法切割數(shù)組? 接收兩個(gè)參數(shù),標(biāo)志其實(shí)位置與結(jié)束位置,這兩種方法不會(huì)影響原數(shù)組? splice方法可用于刪除?插入?替換? 三個(gè)參數(shù)(第一個(gè)參數(shù)表示需要操作的位置,第二個(gè)參數(shù)-需要?jiǎng)h除的項(xiàng)數(shù)? 第三個(gè)參數(shù)-需要插入的項(xiàng))
<script>
? ? ? ? let arr=[1,2,3,4];
? ? ? ? let arr1=[5,6,7,8];
? ? ? ? console.log(arr.concat(arr1)) //concat?方法會(huì)將arr和arr1組合在一起
? ? let arr2 = [1, 2, 5, 9, 7, 10];
? ? console.log(arr2.slice(1, 4))//slice方法會(huì)將數(shù)組切割基本原則是含頭不含尾,就是只會(huì)包含第一? ? ? 個(gè)參數(shù)下標(biāo)的值
? ? //而不包含第二個(gè)參數(shù)個(gè)數(shù)的所有個(gè)數(shù)尾部會(huì)被去掉
? ? arr2.splice(2, 1);//選擇刪除的是下標(biāo)為2的值并且只刪除一個(gè)
? ? console.log(arr2)//輸出為 [1, 2, 9, 7, 10]
? ? arr2.splice(2, 1, "yellow")//這里也可是實(shí)現(xiàn)替換的操作將下標(biāo)為2的一個(gè)值替換為字符串yellow
? ? console.log(arr2)//輸出為[1, 2, "yellow", 7, 10]
? ? arr2.splice(2, 0, 12, 20)//此時(shí)是插入的操作在下標(biāo)為2的位置刪除0個(gè)值插入12,20并且會(huì)插入到? ? ? 第一個(gè)參數(shù)下標(biāo)的前面位置
</script>
6.位置方法:indexOf和lastIndexOf,查找目標(biāo)的索引位置,沒(méi)有則為0。可設(shè)置第二個(gè)參數(shù)代表查找開(kāi)始的位置
<script>
? ? let arr = [1, 2, 5, 4, 8, 69]
? ? console.log(arr.indexOf(9))//如果數(shù)組中沒(méi)有此元素的話就會(huì)返回-1
? ? console.log(arr.indexOf(2))//如果此數(shù)組中有此元素的話就會(huì)返回此元素的下標(biāo)
? ? console.log(arr.indexOf(2, 0))//此時(shí)第二個(gè)參數(shù)可以定義開(kāi)始查找的位置。
? ? //indexOf一般用于判斷條件中尤其是沒(méi)有此下標(biāo)時(shí)返回-1的用法可以用來(lái)作為數(shù)組排序等等的判斷條件
? ? //if(arr.indexOf==-1){arr1.push(xxxx)}
? </script>
7.join()方法
<script>
? ? let arr = [1, 2, 3, 4];
? ?document.write(arr.join("*"))//可以使數(shù)組中的元素以特定的字符連接
? ?document.write(arr.join())//不傳參數(shù)時(shí),可以將數(shù)組中的值轉(zhuǎn)為字符串
? </script>
8.reduce可以用來(lái)數(shù)組求和的操作
<script>
? ? let arr = [1, 2, 3, 4];
? ? function sum(total, num) {
? ? ? return total + num;
? ? }
? ? console.log(arr.reduce(sum));//此時(shí)的reduce可以做到求和的操作
? </script>
9.push()方法,可以將數(shù)組末尾添加元素
<script>
? ? let arr = [1, 2, 3, 4];
? ? arr.push(5)
? ? console.log(arr) //輸出為 [1,2,3,4,5]
? </script>
41.promise是什么?能解決什么問(wèn)題?
1.回調(diào)地域? 代碼不好維護(hù)?錯(cuò)誤處理非常麻煩?不能同意處理錯(cuò)誤
2.多個(gè)請(qǐng)求并發(fā)? 基于回調(diào)(之前寫(xiě)的并發(fā)讀取文件,自定義定時(shí)器)
promise是一個(gè)人類,類用的時(shí)候?只需要new?
1.new Promise()是需要傳遞的一個(gè)執(zhí)行器函數(shù),exector這個(gè)函數(shù)默認(rèn)就會(huì)執(zhí)行(立即執(zhí)行)
2.每個(gè)promise()都有三個(gè)狀態(tài)? pending等待狀態(tài) ? fullfiled?成功狀態(tài)? rejected?失敗狀態(tài)
3.默認(rèn)創(chuàng)建一個(gè)promise是等待狀態(tài)? 默認(rèn)提供給你兩個(gè)函數(shù)? resolve讓promise變成成功狀態(tài)
rejected讓promise變成失敗狀態(tài)
4.每個(gè)promise的實(shí)例都具備一個(gè)then方法? then方法中傳遞兩個(gè)參數(shù)? (1)成功的回調(diào) (2)失敗的回調(diào)
5.如何讓一個(gè)promise?變成失敗狀態(tài)? reject()可以拋出一個(gè)錯(cuò)誤
6.如果多次調(diào)用成功或者失敗,都只會(huì)執(zhí)行一次?一旦狀態(tài)變化就不能再變成成功或者失敗
7.自己實(shí)現(xiàn)基本的promise?語(yǔ)法commonjs規(guī)范?可以在一個(gè)模塊中?導(dǎo)出一個(gè)變量?另一個(gè)模塊來(lái)引用
?42.編程:連接兩個(gè)數(shù)組并返回?
<script>
? ? let joinTwoArrays = (arr1, arr2) => {
? ? ? ? return arr1.concat(arr2);
? ? }
? ? let arr1 = [1, 2, 3, 4, 5];
? ? let arr2 = [6, 7, 8, 9, 0];
? ? let arr3 = joinTwoArrays(arr1, arr2);
? ? console.log(arr3); //輸出結(jié)果為[1,2,3,4,5,6,7,8,9,0]
</script>
43.冒泡排序
冒泡排序的原理:
每一趟只能確定將一個(gè)數(shù)歸位。即第一趟只能確定將末位上的數(shù)歸位,第二趟只能將倒數(shù)第 2 位上的數(shù)歸位,依次類推下去。如果有 n 個(gè)數(shù)進(jìn)行排序,只需將 n-1 個(gè)數(shù)歸位,也就是要進(jìn)行 n-1 趟操作。
而 “每一趟 ” 都需要從第一位開(kāi)始進(jìn)行相鄰的兩個(gè)數(shù)的比較,將較大的數(shù)放后面,比較完畢之后向后挪一位繼續(xù)比較下面兩個(gè)相鄰的兩個(gè)數(shù)大小關(guān)系,重復(fù)此步驟,直到最后一個(gè)還沒(méi)歸位的數(shù)。
?
?public static int[] bubbleSort(int[] arr) {
? ? ?if (arr == null || arr.length < 2) {
? ? ? ? ? return arr;
? ? ?}
? ? for (int i = 0; i < arr.length - 1; i++) {
? ? ? ? ?boolean isSorted ?= true;//有序標(biāo)記,每一輪的初始是true
? ? ? ? ?for (int j = 0; j < arr.length -i - 1; j++) {
? ? ? ? ? ? ?if (arr[j + 1] < arr[j]) {
? ? ? ? ? ? ? ? ?isSorted ?= false;//有元素交換,所以不是有序,標(biāo)記變?yōu)閒alse
? ? ? ? ? ? ? ? ?int t = arr[j];
? ? ? ? ? ? ? ? ?arr[j] = arr[j+1];
? ? ? ? ? ? ? ? ?arr[j+1] = t;
? ? ? ? ? ? ?}
? ? ? ? ?}
? ? ? ? ?//一趟下來(lái)是否發(fā)生位置交換,如果沒(méi)有交換直接跳出大循環(huán)
? ? ? ? ?if(isSorted )
? ? ? ? ? ? ? break;
? ? ?}
? ? ?return arr;
}
44.ES6新特性
let?和const命令
var?之前寫(xiě)js變量的時(shí)候?只有一個(gè)關(guān)鍵字?var
但是var有一個(gè)問(wèn)題 ,就是定義的變量有時(shí)候會(huì)成為全局變量
例如
for (var?i=0;i<5;i++){
? ? ? ? console.log(i)
}
console.log('循環(huán)外:'+i)
輸出結(jié)果為:
可以看出?再循環(huán)外部也可以獲取到變量i?的值,顯然變量的作用域范圍太大了。在做復(fù)雜頁(yè)面的時(shí)候?會(huì)帶來(lái)很大的問(wèn)題
let??
let?所聲明的變量?只在let所在的代碼塊內(nèi)有效
例如:
for (let i=0;i<5;i++){
? ? ? ? console.log(i)
}
console.log('循環(huán)外:'+i)
輸出結(jié)果為:
這樣就把變量的i?的作用域控制在了循環(huán)內(nèi)部
const?
const聲明的變量時(shí)常量,不能被修改,類似于Java中的final關(guān)鍵字
例如
const a=10;
console.log("a=",a)
//給a?重新賦值
a=20
console.log("a=",a)
輸出結(jié)果為
可以看到變量a的值是不能被修改的
詳情?請(qǐng)見(jiàn)如下鏈接
http://t.csdn.cn/rpCSY
45.js對(duì)數(shù)組有哪些操作方法
1.concat()? ?用于連接兩個(gè)或者多個(gè)數(shù)組?該方法不會(huì)改變現(xiàn)有的數(shù)組,僅會(huì)返回被連接數(shù)組的一個(gè)副本
?2.join()方法用于把數(shù)組中的所有元素放入一個(gè)字符串,元素是通過(guò)指定的分隔符進(jìn)行分割的,使用“,”分割?不改變?cè)瓟?shù)組
3.push()方法可向數(shù)組的末尾添加一個(gè)或多個(gè)元素,并返回新的長(zhǎng)度。末尾添加,返回的是長(zhǎng)度,會(huì)改變?cè)瓟?shù)組。
4.pop() 方法用于刪除并返回?cái)?shù)組的最后一個(gè)元素。返回最后一個(gè)元素,會(huì)改變?cè)瓟?shù)組
5.shift() 方法用于把數(shù)組的第一個(gè)元素從其中刪除,并返回第一個(gè)元素的值。返回第一個(gè)元素,改變?cè)瓟?shù)組。
6.unshift() 方法可向數(shù)組的開(kāi)頭添加一個(gè)或更多元素,并返回新的長(zhǎng)度。返回新長(zhǎng)度,改變?cè)瓟?shù)組。
7.slice()
返回一個(gè)新的數(shù)組,包含從 start 到 end (不包括該元素)的 arrayObject 中的元素。返回選定的元素,該方法不會(huì)修改原數(shù)組。
?
8.?splice() 方法可刪除從 index 處開(kāi)始的零個(gè)或多個(gè)元素,并且用參數(shù)列表中聲明的一個(gè)或多個(gè)值來(lái)替換那些被刪除的元素。如果從 arrayObject 中刪除了元素,則返回的是含有被刪除的元素的數(shù)組。
9.、sort 排序
按照 Unicode code 位置排序,默認(rèn)升序
10.reverse() 方法用于顛倒數(shù)組中元素的順序。返回的是顛倒后的數(shù)組,會(huì)改變?cè)瓟?shù)組
?
11.?indexOf 和 lastIndexOf
都接受兩個(gè)參數(shù):查找的值、查找起始位置
不存在,返回 -1 ;存在,返回位置。indexOf 是從前往后查找, lastIndexOf 是從后往前查找。
indexOf
12.every
對(duì)數(shù)組的每一項(xiàng)都運(yùn)行給定的函數(shù),每一項(xiàng)都返回 ture,則返回 true
?
?13.some
對(duì)數(shù)組的每一項(xiàng)都運(yùn)行給定的函數(shù),任意一項(xiàng)都返回 ture,則返回 true
?
?14.forEach 數(shù)組遍歷
46.js的選擇器
1.原生js選擇器
如果DOM元素中有id值大多數(shù)瀏覽器支持直接使用方法
<div id="box">
</div>
<script>
box.οnclick=function(){//可以直接調(diào)用id為box的dom元素
? ? console.log(1111)
}
</script>
2.如果沒(méi)有id值的話有多種選擇方法
let box=document.getElementById("這里是dom元素的id值");
let box=document.getElementsByClassName("這里是class值")//注意返回的是數(shù)組元素
let box=document.getElementsByTagName("這里是標(biāo)簽名")//注意返回的是標(biāo)簽名的所有值可能是數(shù)組
querySelector():返回文檔中匹配指定css選擇器的第一個(gè)元素
querySelectorAll():返回文檔中匹配指定css選擇器的所有元素
getElementsByName(name): 返回文檔中name屬性為name值的元素,因?yàn)閚ame屬性值不是唯一的,所以查詢到的結(jié)果有可能返回的是一個(gè)數(shù)組,而不是一個(gè)元素。
3.jQuery選擇器
內(nèi)容
基本選擇器有ID選擇器、類選擇器、標(biāo)簽選擇器、通用選擇器,事件的添加方法如下:
$(...).事件名(function() { });
屬性樣式有:
? ? $(...).css("border","1px solid red")
? ? $(...).css({...})
? ? $(...).css("border")
? ? $(...).attr(屬性名,值)
? ? $(...).html() innerHTML
? ? $(...).text() innerText
? ? $(...).val() value值
? ? $(...).addClass()增加
? ? $(...).removeClass() 移除
? ? $(...).toggleClass()開(kāi)關(guān)**
$("#box")//這里選擇的是一個(gè)id為box的元素
$(".box")//這里選擇的是一個(gè)class為box的元素
$("#box ul")//這里選擇的是一個(gè)id為box的元素里面的所有ul元素
$(".box ul")//這里選擇的是一個(gè)class為box的元素里面的所有ul元素
$("*")//可以使用此方法選中所有的元素
$("div")//這里是選中了所有的div元素
47.js的數(shù)據(jù)類型
一、數(shù)據(jù)類型簡(jiǎn)介:
1.JavaScript(以下簡(jiǎn)稱js)的數(shù)據(jù)類型分為兩種:原始類型(即基本數(shù)據(jù)類型)和對(duì)象類型(即引用數(shù)據(jù)類型);
2.js常用的基本數(shù)據(jù)類型包括undefined - - (未定義)、null- - (空的)、number - - (數(shù)字)、boolean- - (布爾值)、string- - (字符串)、Symbol - - (符號(hào));
3.js的引用數(shù)據(jù)類型也就是對(duì)象類型Object- - (對(duì)象),比如:array - - (數(shù)組)、function - - (函數(shù))、data - - (時(shí)間)等;
二、各個(gè)數(shù)據(jù)類型的概念
基本數(shù)據(jù)類型存放在棧中 引用數(shù)據(jù)類型存放在堆中。
1.基本數(shù)據(jù)類型
Undefined:
取undefined一個(gè)值。
表示變量不含有任何值。是未定義的狀態(tài)。
string:
①字符串類型中的單雙引號(hào)作用一樣;
②字符串有l(wèi)ength屬性,可以取得字符串的長(zhǎng)度:
?let one = 'Hello world'
? console.log(one.length) // 輸出長(zhǎng)度:11
③字符串的值是不可變的,要改變一個(gè)字符串的值,首先要銷毀原來(lái)的字符串,再用另一個(gè)包含新值得字符串區(qū)填充該字符串;
④字符串轉(zhuǎn)換:
String(),轉(zhuǎn)型函數(shù),適用于任何數(shù)據(jù)類型(兩個(gè)例外:null,undefined轉(zhuǎn)換后為null和undefined)
toString()方法可以把一個(gè)邏輯值轉(zhuǎn)換為字符串,并返回結(jié)果(兩個(gè)例外:null、undefined沒(méi)有toString()方法)
let ab = 'hello world'
? let bc = null
? let cd = undefined
? console.log(ab.toString()) ?// 輸出:hello world
? // console.log(bc.toString()) ?// 報(bào)錯(cuò)
? // console.log(cd.toString()) ?// 報(bào)錯(cuò)
? console.log(String(ab)) ?// 輸出:hello world
? console.log(String(bc)) ?// 輸出:null
? console.log(String(cd)) ?// 輸出:undefined
Boolean:
只有倆個(gè)值:true或false。
布爾值常用在條件測(cè)試中。比如說(shuō)判斷1>2是不是對(duì)的,是對(duì)的就返回true,是錯(cuò)的就返回false,然后我們就可以根據(jù)返回的結(jié)果去做倆種不同的操作。
Null:只有一個(gè)值。null是表示一個(gè)空對(duì)象指針,這也是typeof操作符檢測(cè) null 值時(shí)會(huì)返回 object 的原因。
Number:
數(shù)字(數(shù)字可以帶小數(shù)點(diǎn)也可以不帶)、NaN、Infinity
2.引用數(shù)據(jù)類型
引用類型可以添加屬性和方法:
引用類型的賦值是對(duì)象引用:
?48.減少頁(yè)面加載時(shí)間的方法
1、減少http請(qǐng)求(合并文件、合并圖片)
2、優(yōu)化圖片文件,減小其尺寸,特別是縮略圖,一定要按尺寸生成縮略圖然后調(diào)用,不要在網(wǎng)頁(yè)中用resize方法實(shí)現(xiàn),雖然這樣看到的圖片外形小了,但是其加載的數(shù)據(jù)量一點(diǎn)也沒(méi)減少。曾經(jīng)見(jiàn)過(guò)有人在網(wǎng)頁(yè)中加載的縮略圖,其真實(shí)尺寸有10M之巨…普通圖像、icon也要盡可能壓縮后,可以采用web圖像保存、減少顏色數(shù)等等方法實(shí)現(xiàn)。
3、圖像格式的選擇(GIF:提供的顏色較少,可用在一些對(duì)顏色要求不高的地方)
4、 壓縮Javascript、CSS代碼:一般js、css文件中存在大量的空格、換行、注釋,這些利于閱讀,如果能夠壓縮掉,將會(huì)很有利于網(wǎng)絡(luò)傳輸。這方面的工具也有很多,可以在百度里搜索一下關(guān)鍵字“css代碼壓縮”,或者“js代碼壓縮”將會(huì)發(fā)現(xiàn)有很多網(wǎng)站都提供這樣的功能,當(dāng)然了你也可以自己寫(xiě)程序來(lái)做這個(gè)工作,如果你會(huì)的話。就拿我們這個(gè)網(wǎng)站來(lái)說(shuō)吧。剛開(kāi)始上傳這個(gè)網(wǎng)站的時(shí)候,我的很多Css代碼都沒(méi)有壓縮,后面發(fā)現(xiàn)了這個(gè)問(wèn)題,我就上網(wǎng)找了相關(guān)的網(wǎng)站的壓縮代碼的功能,最后就把很多CSS文件都?jí)嚎s了。這個(gè)壓縮比率還是比較高的,一般都有百分五十左右。這個(gè)代碼壓縮對(duì)于網(wǎng)頁(yè)的加載還是很有用的。
5、 服務(wù)器啟用gzip壓縮功能:將要傳輸?shù)奈募嚎s后傳輸?shù)娇蛻舳嗽俳鈮?#xff0c;在網(wǎng)絡(luò)傳輸 數(shù)據(jù)量會(huì)大幅減小。在服務(wù)器上的Apache、Nginx可直接啟用,也可用代碼直接設(shè)置傳輸文件頭,增加gzip的設(shè)置,也可從 負(fù)載均衡設(shè)備直接設(shè)置。不過(guò)需要留意的是,這個(gè)設(shè)置會(huì)略微增加服務(wù)器的負(fù)擔(dān)。服務(wù)器性能不是很好的網(wǎng)站,要慎重考慮。
6.標(biāo)明高度和寬度(如果瀏覽器沒(méi)有找到這兩個(gè)參數(shù),它需要一邊下載圖片一邊計(jì)算大小,如果圖片很多,瀏覽器需要不斷地調(diào)整頁(yè)面。這不但影響速度,也影響瀏覽體驗(yàn)。 當(dāng)瀏覽器知道了高度和寬度參數(shù)后,即使圖片暫時(shí)無(wú)法顯示,頁(yè)面上也會(huì)騰出圖片的空位,然后繼續(xù)加載后面的內(nèi)容。從而加載時(shí)間快了,瀏覽體驗(yàn)也更好了。)
7、網(wǎng)址后面加上“/”:對(duì)服務(wù)器而言,不加斜杠服務(wù)器會(huì)多一次判斷的過(guò)程,加斜杠就會(huì)直接返回網(wǎng)站設(shè)置的存放在網(wǎng)站根目錄下的默認(rèn)頁(yè)面。
8、在文件頭部放置css樣式的定義
9、文件末尾放Javascript腳本
網(wǎng)頁(yè)文件的載入是從上到下加載的,很多Javascript腳本執(zhí)行效率較低,或者在網(wǎng)頁(yè)前面都不需要執(zhí)行的,如果將這些腳本放置到頁(yè)面比較靠前的位置,可能導(dǎo)致網(wǎng)站內(nèi)容載入速度下降或加載不了,將這些腳本放置在網(wǎng)頁(yè)文件末尾,一定要放 置在前面的腳本要改用所謂的“后載入”方式加載,在主體網(wǎng)頁(yè)加載完成后再加載,防止其影響到主體網(wǎng)頁(yè)的加載速度。
10、 Ajax采用緩存調(diào)用
Ajax調(diào)用都采用緩存調(diào)用方式,一般采用附加特征參數(shù)方式實(shí)現(xiàn),注意其中的<script src=”xxx.js?{VERHASH}”,{VERHASH}就是特征參數(shù),這個(gè)參數(shù)不變化就使用緩存文件,如果發(fā)生變化則重新下載新文件或更新信息。
11、 盡可能減少DCOM元素
這個(gè)很好理解,就是盡可能減少網(wǎng)頁(yè)中各種<>元素?cái)?shù)量,例如<table>的冗余很嚴(yán)重,而我們完全可以用<div>取代之。
12、 使用多域名負(fù)載網(wǎng)頁(yè)內(nèi)的多個(gè)文件、圖片
13、 使用CDN
14、在服務(wù)器端配置control-cache last-modify-date
15、在服務(wù)器配置Entity-Tag if-none-match
轉(zhuǎn)自一下鏈接
http://t.csdn.cn/Zrhn9
49.怎么理解模塊化開(kāi)發(fā)
一、什么是模塊化
所謂的模塊化開(kāi)發(fā)就是封裝細(xì)節(jié),提供使用接口,彼此之間互不影響,每個(gè)模塊都是實(shí)現(xiàn)某一特定的功能。模塊化開(kāi)發(fā)的基礎(chǔ)就是函數(shù)
二、實(shí)現(xiàn)模塊化--用函數(shù)封裝
?上面的函數(shù)func1()和func2(),組成一個(gè)模塊。使用的時(shí)候,直接調(diào)用就行了。這種做法的缺點(diǎn)很明顯:”污染”了全局變量,無(wú)法保證不與其他模塊發(fā)生變量名沖突,而且模塊成員之間看不出直接關(guān)系。
三、實(shí)現(xiàn)模塊化--使用對(duì)象封裝
為了解決上面的缺點(diǎn),可以把模塊寫(xiě)成一個(gè)對(duì)象,所有的模塊成員都放到這個(gè)對(duì)象里面。
上面的函數(shù)func1()和func2(),都封裝在obj對(duì)象里。使用的時(shí)候,就是調(diào)用這個(gè)對(duì)象的屬性。
obj.func1(); 這樣做也是有問(wèn)題的,變量可以被外面隨意改變而導(dǎo)致不安全。比如,年齡被修改成負(fù)數(shù)obj.age=-100;
四、實(shí)現(xiàn)模塊化--立即執(zhí)行函數(shù)寫(xiě)法
使用”立即執(zhí)行函數(shù)”(immediately-invoked FunctionExpression,IIFE),可以達(dá)到不暴露私有成員的目的。這個(gè)也是閉包處理的一種方式。
?使用上面的寫(xiě)法,外部代碼無(wú)法讀取內(nèi)部的age變量
console.log(obj.age);//undefined
五、實(shí)現(xiàn)模塊化-放大模式
如果一個(gè)模塊很大,必須分成幾個(gè)部分,或者一個(gè)模塊需要繼承另一個(gè)模塊,這時(shí)就有必要采用”放大模式”(augmentation)。在原有的基礎(chǔ)上擴(kuò)展更多的方法。
var obj=(function(mod){
? ? ?mod.func3=function(){
? ? ? ? ?//...
? ? ?};
? ? ?return mod;//方便方法連續(xù)調(diào)用
})(obj)
六、實(shí)現(xiàn)模塊化-寬放大模式(Loose augmentation)
在瀏覽器環(huán)境中,模塊的各個(gè)部分通常都是從網(wǎng)上獲取的,有時(shí)無(wú)法知道哪個(gè)部分會(huì)先加載。如果采用上面的寫(xiě)法,第一個(gè)執(zhí)行的部分有可能加載一個(gè)不存在空對(duì)象,這時(shí)就要采用”寬放大模式”。
var obj=(function(mod){
? ? ?//...
? ? ?return mod;
})(window.obj||{});//確保對(duì)象不為空
與”放大模式”相比,”寬放大模式”就是”立即執(zhí)行函數(shù)”的參數(shù)可以是空對(duì)象,解決了非空的問(wèn)題
七、實(shí)現(xiàn)模塊化--輸入全局變量
獨(dú)立性是模塊的重要特點(diǎn),模塊內(nèi)部最好不與程序的其他部分直接交互。為了在模塊內(nèi)部調(diào)用全局變量,必須顯式地將其他變量輸入模塊。
(function(window,undefined){
? ...
})(window);
?
這事Jquery框架的源碼,將window對(duì)象作為參數(shù)傳入,這樣做除了保證模塊的獨(dú)立性外,還使得模塊之間的依賴關(guān)系變得明顯。
?參考自:http://t.csdn.cn/7MJ5Q
?50.什么是閉包,有什么作用?
什么是閉包,閉包的作用? 閉包的應(yīng)用
答:函數(shù)執(zhí)行,形成私有的執(zhí)行上下文,使內(nèi)部私有變量不受外接干擾,起到了保護(hù)和保存的作用
?閉包(closure)就是能蚣讀取其他函數(shù)內(nèi)部變量的函數(shù),在Javascript中,只有函數(shù)內(nèi)部的子函數(shù)才能讀取局部變量,所以閉包可以理解成“定義在一個(gè)函數(shù)內(nèi)部的函數(shù)”,在本質(zhì)上,閉包是將函數(shù)內(nèi)部和函數(shù)外部鏈接起來(lái)的橋梁(閉包最典型的應(yīng)用是實(shí)現(xiàn)回調(diào)函數(shù)(callback))
作用:
保護(hù)-避免命名沖突
保存-解決循環(huán)綁定引發(fā)的索引問(wèn)題
應(yīng)用:
設(shè)計(jì)模式中的單例模式
for循環(huán)中的保留i的操作
防抖和節(jié)流
函數(shù)顆?;?/span>
缺點(diǎn):
會(huì)出現(xiàn)內(nèi)存泄露
1.常駐內(nèi)存,會(huì)增大內(nèi)存的使用量,使用不當(dāng)很容易造成內(nèi)存泄露
2.還有一個(gè)非常嚴(yán)重的問(wèn)題,那就是內(nèi)存浪費(fèi)的問(wèn)題。這個(gè)內(nèi)存浪費(fèi)不僅僅是因?yàn)樗浅qv內(nèi)存,更重要的是 ,對(duì)閉包的使用不當(dāng)會(huì)造成無(wú)效內(nèi)存的產(chǎn)生
優(yōu)點(diǎn):
1.保護(hù)函數(shù)內(nèi)變量的安全
2.在內(nèi)存中維持一個(gè)變量(用的太多就變成了缺點(diǎn)-因?yàn)檎純?nèi)存)
3.邏輯連續(xù),當(dāng)閉包作為另一個(gè)函數(shù)調(diào)用的參數(shù)時(shí),避免你脫離當(dāng)前的邏輯而單獨(dú)編寫(xiě)額外的邏輯
4.方便調(diào)用上下文的局部變量
5.加強(qiáng)封裝性,可以打到對(duì)變量的保護(hù)作用
51.手機(jī)號(hào)的正則表達(dá)式(以1開(kāi)頭的11位數(shù)字)
let?phone = 13715945478; //亂寫(xiě)一個(gè)
let?reg=/^1[3][4][5][7][8][0-9]{9}$/;
console.log(phone,reg.test(phone)?'正確的手機(jī)號(hào)':'不正確的手機(jī)號(hào)'
輸出結(jié)果為
?
^1 -?以1開(kāi)頭
[3][4][7][5][8] -表示第二位是3或4或5或7或8的任意一位
[0-9]{9}$? -表示以0-9任意9位數(shù)字結(jié)尾
總結(jié)
以上是生活随笔為你收集整理的Js面试题(总结)持续取经更新……的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: xposed框架应用
- 下一篇: flexslider轮播demo