JS初級(jí)之變量,DOM,循環(huán)語(yǔ)句
JS如何檢測(cè)變量是一個(gè)string類型?請(qǐng)寫出函數(shù)實(shí)現(xiàn)。
function isString(str){
if(typeof(str) === "string" || str.constructor === String){
return true;
}else{
return false;
}
}
var str = "hello world"
這里需要注意的是也要判斷這個(gè)值的數(shù)據(jù)類型。
請(qǐng)說明javaScript中的nodeName,nodeVaule,nodeType的區(qū)別
* nodeName 表示節(jié)點(diǎn)的名稱
* 元素節(jié)點(diǎn)的nodeName是標(biāo)簽名稱
* 屬性節(jié)點(diǎn)的nodeName是屬性名稱
* 文本節(jié)點(diǎn)的nodeName是#text
* 文檔節(jié)點(diǎn)的nodeName是#document
* nodeVaule 表示文本內(nèi)容
* 對(duì)于文本節(jié)點(diǎn),nodeVaule屬性包含文本
* 對(duì)于屬性節(jié)點(diǎn),nodeValue屬性包含屬性值
* nodeType 屬性返回節(jié)點(diǎn)的類型,常用的如下
* 元素類型對(duì)應(yīng)的節(jié)點(diǎn)類型為1
* 屬性類型對(duì)應(yīng)的節(jié)點(diǎn)類型為2
* 文本屬性對(duì)應(yīng)的節(jié)點(diǎn)類型為3
下列代碼執(zhí)行后,結(jié)果是什么
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
知識(shí)點(diǎn),在for語(yǔ)句中條件用逗號(hào)隔開,就相當(dāng)于“并且”。
var t =(4,5,6),console.log(t) //6,這里也說明逗號(hào)表達(dá)式返回的結(jié)果是由最后一個(gè)表達(dá)式?jīng)Q定的。
統(tǒng)計(jì)從1-400之間的自然對(duì)數(shù)中含有多少個(gè)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中基本數(shù)據(jù)類型有哪些?本地對(duì)象,內(nèi)置對(duì)象,宿主對(duì)象有那些?
基本數(shù)據(jù)類型
string,boolean,number,null,undefined,object。
本地對(duì)象(常用)
Object,Function,String,Number,Boolean,Data,Array,RegExp。
內(nèi)置對(duì)象
簡(jiǎn)單的說,內(nèi)置對(duì)象是本地對(duì)象的一種,其中包含2種對(duì)象,Math,Global(isNaN,parseInt,parseFloat)
宿主對(duì)象 所有BOM,DOM都是宿主對(duì)象 其中BOM常用對(duì)象有
localtion
navigation
screen
history
JS中級(jí)之函數(shù)
編寫一個(gè)函數(shù),參數(shù)為一個(gè)元素,返回指定元素的第一個(gè)元素,函數(shù)越簡(jiǎn)單越好
function getFirst(el){
var nodes = el.children;
return nodes.length!=0?nodes[0]:null;
}
簡(jiǎn)述JavaScript中this的理解。
this代表函數(shù)執(zhí)行的時(shí)候,自動(dòng)生成一個(gè)內(nèi)部對(duì)象,在函數(shù)內(nèi)使用
this指的是調(diào)用函數(shù)的那個(gè)對(duì)象
一下討論this的四種用法
純粹的函數(shù)調(diào)用,說明此時(shí)this代表全局對(duì)象。
var x = 1;
function test(){
this.x = 0;//這里等同于x = 0;已改寫
}
test();//window.test()
alert(x);//0
作為對(duì)象方法的調(diào)用,說明此時(shí)this指向這個(gè)的上級(jí)對(duì)象。
function test(){
alert(this.x);
}
var o = {};
o.x=1;
o.m = test;
o.m()//1
作為構(gòu)造函數(shù)的調(diào)用,說明此時(shí)this是指向新對(duì)象,不是全局對(duì)象!!!
var x = 2;
function test(){
this.x = 1;
}
var o = new test();
alert(o.x)//1
alert(x)//2
apply調(diào)用
var x = 0;
function test(){
alert(this.x)}
var o = {};
o.x = 1;
o.m = test;
o.m.apply()//0,當(dāng)參數(shù)為空的時(shí)候,默認(rèn)調(diào)用全局
o.m.apply(o)//1
什么是閉包?閉包的特性?對(duì)頁(yè)面有什么影響?好處和壞處?請(qǐng)寫出一個(gè)閉包的簡(jiǎn)單實(shí)例?
閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)。
閉包特性
閉包外層是一個(gè)函數(shù)
閉包內(nèi)層也是一個(gè)函數(shù)
閉包會(huì)return內(nèi)部函數(shù)
閉包返回的函數(shù)內(nèi)部不能有return
執(zhí)行閉包后,閉包內(nèi)部的變量會(huì)緩存
閉包只有被執(zhí)行的時(shí)候才會(huì)調(diào)用
好處和壞處
方便上下文調(diào)用
加強(qiáng)封裝性
壞處 浪費(fèi)內(nèi)存
實(shí)例
function a(){
var i = 0;
function b(){
console.log(++i)
// i=null 解決內(nèi)存泄漏
}
return b;
}
var c = a();//執(zhí)行a函數(shù)
c()//執(zhí)行b函數(shù),也就是執(zhí)行閉包,結(jié)果為1
c()//2
…
IE和Firefox處理兼容。
綁定事件監(jiān)聽
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對(duì)象
function getEvent(e){
return e ? e : windowm.event;
}
function getTarget(e){
return e.target||e.srcElement
}
//阻止默認(rèn)和冒泡
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實(shí)現(xiàn)
知識(shí)點(diǎn),得到的是數(shù)組,要遍歷。
var a = document.getElementsByClassName("red");
for(var i =0;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這里指向一個(gè)對(duì)象,`var b =a ` 則是將b也指
向這個(gè)對(duì)象,第三行代碼,實(shí)際是已經(jīng)不共享對(duì)象了,a已經(jīng)改寫了,而b.x里面則添
加了x = {n:2},故有上結(jié)果。
7. Boolean對(duì)象和Boolean值
var x = new Boolean(false); if (x) { alert("hi"); } var y = Boolean(0); if (y) { alert("hello"); } //alert("hi"),undefined
8.什么是跨域?跨域的幾種實(shí)現(xiàn)方法?
* 跨域是通過js在不同域進(jìn)行數(shù)據(jù)傳輸或者通信,當(dāng)端口號(hào),協(xié)議,域名 不同的情況下,使用ajax是拿不到數(shù)據(jù)的。
* 解決方法
* 使用window.name進(jìn)行跨域,
a.html頁(yè)面,比如說域名是www.abc.com/a.html;這里需要注意的是 數(shù)據(jù)只能是字符串形式。
```
b.html頁(yè)面,比如說www.baidu.com/b.html
```
```
用H5 window.postMessage,可自行百度。
9.判斷當(dāng)前瀏覽器的類型
var useAgent = window.navigator.useAgent;
if(useAgent.indexOf("Chorme")){
alert("是Chorme瀏覽器")
};
if(useAgent.indexOf("Safari")){
alert("是Safari瀏覽器")
};
if(useAgent.indexOf("Firefox")){
alert("是Firefox瀏覽器")
};
主要涉及的知識(shí)點(diǎn) 是考察window對(duì)象下的navgator對(duì)象的useAgent屬性,得到是字符串,返回最字符串進(jìn)行操作。
HTML5,CSS3初級(jí),中級(jí)面試題
CSS3新特性有哪些?請(qǐng)做說明。不少于5條
選擇器類(稍微特別一點(diǎn)的)
* 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;}
text-decoration為文本添加下劃線 默認(rèn)值none
邊框,背景 樣式
圓角 border-radius,四個(gè)參數(shù) 從上左到下右 4個(gè)方位
漸變,
線性漸變.
linear-gradient(left,#333,#999)(默認(rèn)是從上到下)
第一個(gè)參數(shù)為方位,可以是對(duì)角,如left to。也可以是角度,注意這里是順時(shí)鐘,如180deg就是從下到上
徑向漸變.
radial-gradient(center,circle,yellow 10%,bule 30%)
陰影,box-shadow.反射,box-reflect
背景,background-clip
布局
flex布局
多列布局column,參數(shù)column-count,column-gap,column-rule
動(dòng)畫,過渡
* transition
* transform
* animation
HTML有哪些新特性?
新增標(biāo)簽
用于繪畫的 canvas 元素
用于媒介回放的 video 和 audio 元素
對(duì)本地離線存儲(chǔ)的更好的支持 Local storge,sessionStorage
新的表單控件,比如 calendar、date、time、email、url、search,移動(dòng)端體驗(yàn)更好
新增獲取地理位置,上傳文件等API
新的跨域通信機(jī)制 window.postMessage
3.localStorage,sessionStorage,cookie 的區(qū)別
localStorage 用于持久化的本地存儲(chǔ),關(guān)閉頁(yè)面還有,除非主動(dòng)刪除,否則一直存在,存儲(chǔ)量大
sessionStorage 不是持久化的本地存儲(chǔ),關(guān)閉頁(yè)面就不會(huì)有
cookie 是與服務(wù)器交互的,作為http規(guī)范的一部分而存在,在瀏覽器和服務(wù)器之間來回,存儲(chǔ)量小
4.如何觸發(fā)頁(yè)面的回流reflow,重繪repaint,解釋下它們的基本原理
DOM元素的修改,添加,刪除。
僅改變DOM元素的字體顏色,只有repaint
應(yīng)用新的樣式或者修改任何元素外觀的屬性
resilze瀏覽器窗口,滾動(dòng)
讀取元素 如(offsetTop,offsetLeft等等)
原理解析
repaint 重繪 是當(dāng)一個(gè)元素的外觀被改變的時(shí)候產(chǎn)生重繪。
reflow 重排(回流),是當(dāng)DOM發(fā)生改變,如寬高等。如果reflow 的頻繁,會(huì)導(dǎo)致GPU使用率上升
減少性能影響的方法
1. 減少對(duì)DOM的操作,如 查詢時(shí)候?qū)⒅蒂x值給局部變量,減少循環(huán)對(duì)DOM的操作。
2. 使用JSON格式來進(jìn)行數(shù)據(jù)交換
5.transition的局限性
transition 需要事件觸發(fā)
transition 是一次性的,不能重復(fù),除非一在觸發(fā)
transition 只有開始和結(jié)束2種狀態(tài),不能定義中間狀態(tài)
transition 只能定義一個(gè)屬性的變化,不能涉及多個(gè)屬性。
transition 不能識(shí)別display的變化。
6.如何優(yōu)化頁(yè)面速度,提高頁(yè)面響應(yīng)。
取消重定向,原因是網(wǎng)站都會(huì)首先加載一個(gè)空白的頁(yè)面,然后在定向到另外的頁(yè)面。
合并javaScript
合并css
使用css sprite
啟用GZIP
css,js引入文件位置,css放在 里面,js放在尾部
img標(biāo)簽要添加alt屬性
清除無(wú)效的a標(biāo)簽,并給a標(biāo)簽加上title屬性
緩存靜態(tài)資源
不用iframe/frame
減少DNS域名查找時(shí)間,將DNS的時(shí)間設(shè)置為較低的水平,比如60-100ms進(jìn)行一次DNS查詢
7.如何提高前端性能
用webStorage代替cookie,可以減少HTTP請(qǐng)求的數(shù)據(jù)量
使用css3動(dòng)畫,開啟GPU加速。translate3d()
緩存HTML標(biāo)記
8.如何對(duì)網(wǎng)站的文件和資源進(jìn)行優(yōu)化
文件合并
文件最小化
使用cdn托管
緩存的使用
9.請(qǐng)簡(jiǎn)單說明浮動(dòng)和絕對(duì)定位的區(qū)別和應(yīng)用。
二者都會(huì)脫離文檔流,并自動(dòng)轉(zhuǎn)換為塊級(jí)元素。不同的是絕對(duì)定位的元素是按照瀏覽器的左上角計(jì)算的或者對(duì)設(shè)置相對(duì)定位的父元素開始的,它的脫離文檔流不占據(jù)空間,因此會(huì)產(chǎn)生覆蓋頁(yè)面上的其他元素,故有了z-index屬性。
浮動(dòng)元素還是基于正常的文檔流,只是在文檔流中抽出,并盡可能的移動(dòng)到最左側(cè)或者右側(cè),文字內(nèi)容會(huì)圍繞在浮動(dòng)元素周圍,仍然在文檔流中的元素會(huì)替補(bǔ)原先的空間。
10.說說移動(dòng)端的兼容和常見問題解決方案(整理了自己用過的)
1. meta 元標(biāo)簽基礎(chǔ)知識(shí)
* 將窗口調(diào)整為設(shè)備窗口,并禁止用戶縮放
```
```
```
```
* 當(dāng)網(wǎng)站添加到主屏幕快速啟動(dòng)方式,以及頂部導(dǎo)航條樣式
```
```
```
```
2. 移動(dòng)端字體
* 中文使用默認(rèn)字體,英文用Helvetica
3. 觸摸事件的響應(yīng)順序
```
1、ontouchstart
2、ontouchmove
3、ontouchend
4、onclick
```
4. Retina屏幕下問題解決
* 移動(dòng)端的視覺稿通常會(huì)設(shè)計(jì)為傳統(tǒng)PC的2倍,通常把設(shè)計(jì)稿乘以2/1得到實(shí)際書寫時(shí)候打大小
* 圖片則設(shè)置為 實(shí)際寬高的50%,如 background-position:50% 50%;
5. IOS系統(tǒng)下被觸摸的時(shí)候有半透明遮罩
```
a,button,input,textarea{-webkit-tap-heightlight-color:rgb(0,0,0,0);}
```
6. webkit表單元素的默認(rèn)外觀怎么重置
```
.css{-webkit-appearance:none;}
```
7. 打電話,發(fā)郵件
```
打電話給020-62682400
```
```
13249791010@163.com
```
8. 移動(dòng)端模擬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下禁止調(diào)整字體大小
body{-webkit-text-size-adjust:100%}
```
10. ios下輸入框取消大寫
```
11. css3動(dòng)畫盡可能地使用合成屬性transform和opacity來設(shè)計(jì)CSS3動(dòng)畫,不使用position的left和top來定位,用translate3D開啟加速
11.說說移動(dòng)端2欄布局,左側(cè)定寬,右側(cè)自適應(yīng)的幾種方法
* HTML代碼
左側(cè)固定
右側(cè)自適應(yīng)
```
第一種方法,浮動(dòng)+定位(等高布局)
.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;
}
```
第二種,浮動(dòng)(等高布局)
.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有什么關(guān)聯(lián)(只是基于自己的理解,暫無(wú)相關(guān)項(xiàng)目經(jīng)驗(yàn))
websocket屬于H5新增的,websocket是基于http的,和http沒有基本關(guān)系(或者說交集不大),http只負(fù)責(zé)websokect的連接
http不是持久性的協(xié)議,websocket是持久性的協(xié)議,在http中一個(gè)request對(duì)應(yīng)一個(gè)response,也就說明了 http的缺點(diǎn) http是被動(dòng)的,服務(wù)器端不能主動(dòng)發(fā)起請(qǐng)求
ajax的輪詢,每隔幾秒發(fā)起一個(gè)請(qǐng)求給服務(wù)端,這樣比較消耗內(nèi)存,需要更快的響應(yīng)速度
polling 則是采用阻塞模型(打電話,如果沒信息值一直不掛),則是需要更多的電話,ajax的輪詢和 polling 的作用是實(shí)時(shí)推送
websokect解決的問題是,讓服務(wù)端有主動(dòng)性,只需要消耗一次的HTTP請(qǐng)求
前后端分離的理解
近期前后端分離特別熱門,一直搞不懂前后端分離是個(gè)什么鬼,有個(gè)什么作用。只知道以前前端把寫好的頁(yè)面發(fā)給后端,后端套用接口,這樣就比較容易出現(xiàn)問題,工作量也比較繁瑣。當(dāng)我自己用vue做webapp,寫json數(shù)據(jù)結(jié)構(gòu)的時(shí)候,才稍微有點(diǎn)意識(shí),以前直接是把數(shù)據(jù)寫死或者從后臺(tái)調(diào)用在html上顯示,但是在用了vue之后,你是不是很少看見在html模板里面有直接的數(shù)據(jù)顯示!!!基本都是前后端通過json在交流,前端用vue去實(shí)現(xiàn)組件化,工程化,但是有一個(gè)缺點(diǎn)是不利于seo優(yōu)化,你html里面都沒關(guān)鍵字怎么優(yōu)化。最后關(guān)鍵一點(diǎn),后端值負(fù)責(zé)數(shù)據(jù),前端值負(fù)責(zé)顯示。
分離的好處
以前崇尚全棧工程師,一個(gè)人不但管前端并且管后端,甚至數(shù)據(jù)庫(kù)。長(zhǎng)期以往,代碼的解耦性可能不是很好。
前后端分離以后,前后端值專注于只自己的開發(fā)工作,打造一個(gè)全棧式的團(tuán)隊(duì)。特點(diǎn)之二是實(shí)現(xiàn)前后端的解耦,前后端只需要按照溝通好的參數(shù)和接口,只要這個(gè)不改變,也只要前端人員修改代碼,減少工作量。
要不要前后端分離,分為三點(diǎn)。
輕前端頁(yè)面
布局簡(jiǎn)單,樣式較少,無(wú)css動(dòng)畫,只有少量的業(yè)務(wù)邏輯,只需要在不同終端兼容
重前端頁(yè)面
頁(yè)面布局復(fù)雜,樣式多,css動(dòng)畫多,有復(fù)雜的業(yè)務(wù)代碼,需要在不同終端和瀏覽器上做兼容。
前后端均衡
頁(yè)面布局始終,樣式適中,少許動(dòng)畫,業(yè)務(wù)邏輯較為簡(jiǎn)單,且只需要在不同終端上兼容
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/51160.html
摘要:面試題目匯總前言近期在找工作,也在讀前端面試江湖這本書,書中整理了很多基礎(chǔ)的面試題目,在書中也發(fā)現(xiàn)了一些錯(cuò)誤。好記性不如爛筆頭,于是整理下對(duì)自己有益的題目,都是一些較為基礎(chǔ)的題目后期還會(huì)更新。,返回一個(gè)數(shù)組,成員為匹配的字符串。
面試題目匯總
前言
近期在找工作,也在讀 前端面試江湖 這本書,書中整理了很多基礎(chǔ)的面試題目,在書中也發(fā)現(xiàn)了一些錯(cuò)誤。好記性不如爛筆頭,于是整理下對(duì)自己有益的...
QLQ
2019-08-20 18:57
評(píng)論0
收藏0
摘要:面試題目匯總前言近期在找工作,也在讀前端面試江湖這本書,書中整理了很多基礎(chǔ)的面試題目,在書中也發(fā)現(xiàn)了一些錯(cuò)誤。好記性不如爛筆頭,于是整理下對(duì)自己有益的題目,都是一些較為基礎(chǔ)的題目后期還會(huì)更新。,返回一個(gè)數(shù)組,成員為匹配的字符串。
面試題目匯總
前言
近期在找工作,也在讀 前端面試江湖 這本書,書中整理了很多基礎(chǔ)的面試題目,在書中也發(fā)現(xiàn)了一些錯(cuò)誤。好記性不如爛筆頭,于是整理下對(duì)自己有益的...
摘要:前端日?qǐng)?bào)精選如何合理地設(shè)計(jì)的深入了解一個(gè)超快的引擎也稱全面了解作用域源碼分析二奇淫技巧總結(jié)整理下前端江湖面試對(duì)自己有益的題目。
2017-08-27 前端日?qǐng)?bào)
精選
如何合理地設(shè)計(jì)Redux的State深入了解一個(gè)超快的 CSS 引擎: Quantum CSS (也稱?Stylo) ★ Mozilla Hacks全面了解JS作用域Zepto源碼分析(二)奇淫技巧總結(jié)整理下《前端江湖面試...
摘要:原文地址游客前言金三銀四,很多同學(xué)心里大概都準(zhǔn)備著年后找工作或者跳槽。最近有很多同學(xué)都在交流群里求大廠面試題。
最近整理了一波面試題,包括安卓JAVA方面的,目前大廠還是以安卓源碼,算法,以及數(shù)據(jù)結(jié)構(gòu)為主,有一些中小型公司也會(huì)問到混合開發(fā)的知識(shí),至于我為什么傾向于混合開發(fā),我的一句話就是走上編程之路,將來你要學(xué)不僅僅是這些,豐富自己方能與世接軌,做好全棧的裝備。
原文地址:游客kutd...