1 ,什么是閉包叠骑?閉包有什么好處联四?使用閉包要注意什么扰才?
閉包:函數(shù)嵌套函數(shù)雄右,內(nèi)部函數(shù)可以引用外部函數(shù)的參數(shù)和變量剃诅,變量和參數(shù)不會(huì)被垃圾回收機(jī)制所回收
好處:1)希望一個(gè)變量長期駐扎在內(nèi)存之中
2)避免全局變量的污染
3)私有成員的存在
注意:可能會(huì)造成內(nèi)存泄漏
詳情可參考:http://www.reibang.com/p/76ad6105bb8b
2巷送,在js中通過typeof能彈出的數(shù)據(jù)類型有哪些
number,string矛辕,boolean笑跛,function,object聊品,undefined
3堡牡,arr.pop(),arr.push()有什么區(qū)別
<script>
var arr=[2,1,3,21,12];
arr.pop();//從數(shù)組最后面一個(gè)數(shù)字刪除杨刨,返回被刪除的數(shù)字=》12
arr.push(8)//從數(shù)組最后面添加一個(gè)數(shù)字晤柄,返回添加之后數(shù)組的長度=》5;
</script>
4妖胀,以下代碼彈出結(jié)果是什么芥颈?
alert(aSome);
function aSome(){
var aSome=3;
function bSome(){
var aSome=1;
alert(aSome);
}
bSome();
}
aSome();
結(jié)果:
1,彈出整個(gè)aSome函數(shù)體赚抡,因?yàn)楹瘮?shù)預(yù)解析
2爬坑,彈出1
5,以下代碼執(zhí)行結(jié)果是多少涂臣?
<script>
var a='a1';
a++;
alert(a);
</script>
結(jié)果為NaN盾计,因?yàn)樽址?+時(shí)進(jìn)行隱示類型轉(zhuǎn)化,字母++結(jié)果為NaN
6,以下代碼的執(zhí)行結(jié)果是多少赁遗?
var a='撒旦';
a=parseFloat(a);
alert(a==a);
結(jié)果為false署辉,a進(jìn)行轉(zhuǎn)化以后為NaN,NaN和任何值都不相等岩四,包括自己哭尝。
7,常見字符串方法,數(shù)組方法剖煌,數(shù)學(xué)方法.
//字符串方法
str.charAt()
str.toLowerCase()
str.toUpperCase()
str.indexOf()
str.laseIndexOf()
str.substring()
str.split()
//數(shù)組方法
arr.push()
arr.unshift()
arr.pop()
arr.shift()
arr.join()
arr.splice()
arr.reverse()
arr.concat()
arr.sort()
//數(shù)學(xué)方法
Math.random()
Math.pow()
Math.sqrt()
Math.abs()
Math.floor()
Math.ceil()
Math.round()
Math.max()
Math.min()
8,怎樣判斷瀏覽器類型是ie6材鹦?
if(window.navigator.userAgent.toLowerCase().indexOf('msie 6.0')!=-1){
alert('是ie6');
}
9,以下代碼的執(zhí)行結(jié)果是多少耕姊?
<script>
var a=b=0;
while(a<=100){
b+=a;
a++;
}
alert(b);
</script>
結(jié)果:5050
10,var str='abc12 34 43av 345 abd567 98 9';寫一個(gè)程序找出其中的數(shù)字
alert(str.match(/\d+/g))
11桶唐,get和post的區(qū)別
1.Post傳輸數(shù)據(jù)時(shí),不需要在URL中顯示出來茉兰,而Get方法要在URL中顯示尤泽。
2.Post傳輸?shù)臄?shù)據(jù)量大,可以達(dá)到2M,而Get方法由于受到URL長度的限制,只能傳遞大約1024字節(jié).
3.Post顧名思義,就是為了將數(shù)據(jù)傳送到服務(wù)器段,Get就是為了從服務(wù)器段取得數(shù)據(jù).而Get之所以也能傳送數(shù)據(jù),只是用來設(shè)計(jì)告訴服務(wù)器,你到底需要什么樣的數(shù)據(jù).Post的信息作為http請(qǐng)求的內(nèi)容安吁,而Get是在Http頭部傳輸?shù)摹?get 方法用Request.QueryString["strName"]接收
post 方法用Request.Form["strName"] 接收
注意:
雖然兩種提交方式可以統(tǒng)一用Request("strName")來獲取提交數(shù)據(jù),但是這樣對(duì)程序效率有影響燃辖,不推薦使用鬼店。
一般來說,盡量避免使用Get方式提交表單黔龟,因?yàn)橛锌赡軙?huì)導(dǎo)致安全問題
12妇智,cookie,localStorage和sessionStorage有什么區(qū)別氏身?
共同點(diǎn):都是保存在瀏覽器端巍棱,且同源的。
區(qū)別:
1)cookie數(shù)據(jù)始終在同源的http請(qǐng)求中攜帶(即使不需要)蛋欣,即cookie在瀏覽器和服務(wù)器間來回傳遞航徙。而sessionStorage和localStorage不會(huì)自動(dòng)把數(shù)據(jù)發(fā)給服務(wù)器,僅在本地保存陷虎。
2)cookie數(shù)據(jù)還有路徑(path)的概念到踏,可以限制cookie只屬于某個(gè)路徑下。
3)存儲(chǔ)大小限制也不同尚猿,cookie數(shù)據(jù)不能超過4k窝稿,同時(shí)因?yàn)槊看蝖ttp請(qǐng)求都會(huì)攜帶cookie,所以cookie只適合保存很小的數(shù)據(jù)凿掂,如會(huì)話標(biāo)識(shí)伴榔。sessionStorage和localStorage 雖然也有存儲(chǔ)大小的限制,但比cookie大得多庄萎,可以達(dá)到5M或更大踪少。
4)數(shù)據(jù)有效期不同,sessionStorage:僅在當(dāng)前瀏覽器窗口關(guān)閉前有效糠涛,自然也就不可能持久保持秉馏;localStorage:始終有效,窗口或?yàn)g覽器關(guān)閉也一直保存脱羡,因此用作持久數(shù)據(jù)萝究;cookie只在設(shè)置的cookie過期時(shí)間之前一直有效,即使窗口或?yàn)g覽器關(guān)閉锉罐。
5)作用域不同帆竹,sessionStorage不在不同的瀏覽器窗口中共享,即使是同一個(gè)頁面脓规;localStorage 在所有同源窗口中都是共享的栽连;cookie也是在所有同源窗口中都是共享的。
13,以下代碼的執(zhí)行結(jié)果是多少秒紧?
<script>
alert(aSome);
function aSome(){
var aSome=3;
function bSome(){
var aSome=1;
alert(aSome);
}
bSome();
}
alert(aSome());
</script>
結(jié)果:
1绢陌,整個(gè)函數(shù)體aSome
2,1
3熔恢,undefined 因?yàn)楹瘮?shù)沒有返回值
14脐湾,以下代碼的執(zhí)行結(jié)果是多少?
<script>
alert(aSome);
var aSome=function(){
var aSome=3;
function bSome(){
var aSome=1;
alert(aSome);
}
bSome();
}
aSome();
</script>
結(jié)果:
1叙淌,undefined 變量預(yù)解析
2秤掌,1
15, 字符串轉(zhuǎn)數(shù)字的方法有哪些鹰霍,怎么進(jìn)行轉(zhuǎn)換的闻鉴?
//轉(zhuǎn)化成整數(shù)
parseInt('12')=>12
parseInt('12abc')=>12
parseInt('12.5abc')=>12
//保留小數(shù)
parseFloat('12')=>12
parseFloat('12abc')=>12
parseFloat('12.5abc')=>12.5
//轉(zhuǎn)化純數(shù)字
Number('12')=>12
Number('12abc')=>NaN
Number('12.5abc')=>NaN
16,封裝一個(gè)獲取隨機(jī)整數(shù)的函數(shù)
<script>
//n,m的隨機(jī)數(shù)封裝
function rnd(n,m){
return Math.floor(Math.random()*(m-n)+n);
}
</script>
17.javascript是面向?qū)ο蟮拿鳎趺大w現(xiàn)javascript的繼承關(guān)系孟岛?
1.屬性
父級(jí)構(gòu)造函數(shù).apply(this,arguments);
2.方法
子級(jí)構(gòu)造函數(shù).prototype=new 父級(jí)構(gòu)造();
子級(jí)構(gòu)造函數(shù).prototype.constructor=子級(jí)構(gòu)造;
18,怎樣創(chuàng)建督勺,添加(2種)和刪除元素
//創(chuàng)建元素ele表示創(chuàng)建元素的標(biāo)簽名
document.createElement(ele);
//添加
//從后面添加
oParent.appendChild(要添加的元素)
//從前面添加
oParent.insertBefore(要添加的元素蚀苛,添加到誰的前面);
//要?jiǎng)h除的元素
oParent.removeChild(要?jiǎng)h除的元素)
19玷氏,設(shè)置屬性的方法有哪些堵未?
1)"." 操作已存在的屬性
2)"[]"可以接收變量,"."能操作的盏触,"[]"都可以操作
3)setAttribute(name,value)設(shè)置自定義屬性
20.列舉for/for in 二種循環(huán)方法的區(qū)別和優(yōu)缺點(diǎn)渗蟹。
for
for(初始化; 條件; 自增){
語句
}
快
不能遍歷對(duì)象的屬性
for in
for(初始化 in object){
語句
}
慢
可以遍歷對(duì)象的屬性
21,描述typeof與instanceof,constructor的區(qū)別是什么赞辩?
typeof
檢測基本數(shù)據(jù)類型
Instanceof
檢測復(fù)合類型
constructor
檢測構(gòu)造函數(shù)
22雌芽,javascript中出現(xiàn)undefined的情況有哪些?
1辨嗽,函數(shù)沒有返回值世落,或者返回值為空,出現(xiàn)undefined
2糟需,變量定義了未賦值屉佳;
3,引用沒有提供實(shí)參函數(shù)形參的值洲押,出現(xiàn)undefined
4武花,查詢一個(gè)對(duì)象屬性或者數(shù)組元素的值不存在,出現(xiàn)undefined
可參考:http://www.reibang.com/p/b0700cce78c8
23杈帐,“=”体箕,“==”专钉,“===”有什么區(qū)別?
"="表示賦值 例如a=1;相當(dāng)于把1賦值給a
"=="表示比較累铅,會(huì)做類型轉(zhuǎn)化跃须,然后再進(jìn)行比較
"==="表示嚴(yán)格比較,不會(huì)做類型轉(zhuǎn)化
注:關(guān)于具體區(qū)別娃兽,后續(xù)文章會(huì)繼續(xù)跟進(jìn)
24菇民,數(shù)組和字符串如何進(jìn)行相互轉(zhuǎn)換?
arr.join()將數(shù)組轉(zhuǎn)化成字符串
str.plit()將字符串轉(zhuǎn)化成數(shù)組
25换薄,你知道的排序方法有哪些玉雾?
歸并排序翔试,快排轻要,冒泡排序,選擇排序
注:關(guān)于具體代碼垦缅,后續(xù)文章會(huì)繼續(xù)跟進(jìn)
26,以下代碼alert的結(jié)果是什么冲泥?
alert(1&&2);
結(jié)果為2
27,call和apply的作用什么壁涎,區(qū)別是什么凡恍?
Object.call(this,obj1,obj2,obj3)
Object.apply(this,arguments)
相同點(diǎn):兩個(gè)方法產(chǎn)生的作用是完全一樣的
不同點(diǎn):方法傳遞的參數(shù)不同
foo.call(this, arg1,arg2,arg3) == foo.apply(this, arguments)==this.foo(arg1, arg2, arg3)
在JavaScript中,代碼總是有一個(gè)上下文對(duì)象,代碼處理該對(duì)象之內(nèi). 上下文對(duì)象是通過this變量來體現(xiàn)的, 這個(gè)this變量永遠(yuǎn)指向當(dāng)前代碼所處的對(duì)象中。
一怔球、方法的定義
call方法:
語法:call(thisObj嚼酝,Object)
定義:調(diào)用一個(gè)對(duì)象的一個(gè)方法,以另一個(gè)對(duì)象替換當(dāng)前對(duì)象竟坛。
說明:
call 方法可以用來代替另一個(gè)對(duì)象調(diào)用一個(gè)方法闽巩。call 方法可將一個(gè)函數(shù)的對(duì)象上下文從初始的上下文改變?yōu)橛?thisObj 指定的新對(duì)象。
如果沒有提供 thisObj 參數(shù)担汤,那么 Global 對(duì)象被用作 thisObj涎跨。
apply方法:
語法:apply(thisObj,[argArray])
定義:應(yīng)用某一對(duì)象的一個(gè)方法崭歧,用另一個(gè)對(duì)象替換當(dāng)前對(duì)象隅很。
說明:
如果 argArray 不是一個(gè)有效的數(shù)組或者不是 arguments 對(duì)象,那么將導(dǎo)致一個(gè) TypeError率碾。
如果沒有提供 argArray 和 thisObj 任何一個(gè)參數(shù)叔营,那么 Global 對(duì)象將被用作 thisObj, 并且無法被傳遞任何參數(shù)所宰。
28审编,什么是事件委托?
利用事件冒泡原理歧匈,將子級(jí)的事件加給父級(jí)垒酬,使用事件委托,可節(jié)省性能,也可以給js動(dòng)態(tài)創(chuàng)建的元素加事件
29勘究,解釋一下jsonp的原理矮湘,為什么不是真正的ajax?
動(dòng)態(tài)創(chuàng)建script標(biāo)簽口糕,回調(diào)函數(shù)
Ajax是頁面無刷新請(qǐng)求數(shù)據(jù)操作
30缅阳,以下代碼的執(zhí)行結(jié)果是多少?
var User = {
count: 1,
getCount: function() {
return this.count;
}
};
console.log(User.getCount()); // what?
var func = User.getCount;
console.log(func()); // what?
結(jié)果為
1,1
2景描,undefined
31,回答以下代碼十办,alert的值分別是多少
<script>
var a = 100;
function test(){
alert(a);
a = 10;
alert(a);
}
test();
alert(a);
</script>
結(jié)果為
1,100
2超棺,10
3向族,10
32,new操作符具體干了什么呢?
1棠绘、創(chuàng)建一個(gè)空對(duì)象件相,并且 this 變量引用該對(duì)象,同時(shí)還繼承了該函數(shù)的原型氧苍。
2夜矗、屬性和方法被加入到 this 引用的對(duì)象中。
3让虐、新創(chuàng)建的對(duì)象由 this 所引用紊撕,并且最后隱式的返回 this 。
33赡突,ajax原理是什么对扶?
(1)創(chuàng)建對(duì)象
var xhr = new XMLHttpRequest();
(2)打開請(qǐng)求
xhr.open('GET', 'example.txt', true);
(3)發(fā)送請(qǐng)求
xhr.send(); 發(fā)送請(qǐng)求到服務(wù)器
(4)接收響應(yīng)
xhr.onreadystatechange =function(){}
(1)當(dāng)readystate值從一個(gè)值變?yōu)榱硪粋€(gè)值時(shí),都會(huì)觸發(fā)readystatechange事件麸俘。
(2)當(dāng)readystate==4時(shí)辩稽,表示已經(jīng)接收到全部響應(yīng)數(shù)據(jù)。
(3)當(dāng)status ==200時(shí)从媚,表示服務(wù)器成功返回頁面和數(shù)據(jù)逞泄。
(4)如果(2)和(3)內(nèi)容同時(shí)滿足,則可以通過xhr.responseText拜效,獲得服務(wù)器返回的內(nèi)容喷众。
34,程序中怎樣捕獲異常紧憾?
try{}catch(e){}
35到千,以下代碼的執(zhí)行結(jié)果是多少?
var uname = 'jack'
function change() {
alert(uname) // ?
var uname = 'lily'
alert(uname) //?
}
change()
結(jié)果:
1,undefined
2,lily
36,怎樣獲取瀏覽器的滾動(dòng)距離赴穗?
scrollTop=document.documentElement.scrollTop||document.body.scrollTop
37憔四,offsetWidth offsetHeight和clientWidth clientHeight的區(qū)別
(1)offsetWidth (content寬度+padding寬度+border寬度)
(2)offsetHeight(content高度+padding高度+border高度)
(3)clientWidth(content寬度+padding寬度)
(4)clientHeight(content高度+padding高度)
38膀息,獲取本月一共有多少天,怎么獲攘苏浴潜支?
<script>
var oDate=new Date();
oDate.setMonth(oDate.getMonth()+1);
oDate.setDate(0);
alert(oDate.getDate());
</script>
39,什么叫引用柿汛?
把一個(gè)對(duì)象冗酿,賦值給新的對(duì)象,這個(gè)新的對(duì)象添加的屬性络断,之前的對(duì)象也具備
40裁替,什么是事件對(duì)象?
事件對(duì)象描述了事件更加詳細(xì)的信息
41貌笨,window.onload和domReady有什么區(qū)別弱判?
window.onload是需要html,css,img等頁面加載完畢才開始加載js
domReady只需要dom樹加載完畢就可以加載js
42躁绸,列舉css清除浮動(dòng)的方法
1,為浮動(dòng)元素父級(jí)加overflow:hidden
2裕循,在浮動(dòng)元素下面加<br style="clear:both"/>
3,為浮動(dòng)元素父級(jí)加height
4臣嚣,為浮動(dòng)元素父級(jí)加.clearfix
.clearfix:after{display:block; content:'';clear:both;}
.clearfix{zoom:1;}
43净刮,如何讓一個(gè)元素垂直水平居中?
<style>
div{width: 200px; height: 200px; background: red; position: absolute;left:50%; top:50%; margin-left:-100px; margin-top:-100px;}
</style>
44硅则,你知道的css選擇器有哪些淹父?
id選擇器( # myid)
類選擇器(.myclassname)
標(biāo)簽選擇器(div, h1, p)
相鄰選擇器(h1 + p)
子選擇器(ul > li)
后代選擇器(li a)
通配符選擇器( * )
屬性選擇器(a[rel = “external”])
偽類選擇器(a: hover, li: nth – child)
45,介紹一下css盒子模型怎虫?
有兩種暑认, IE 盒子模型、標(biāo)準(zhǔn) W3C 盒子模型大审;
IE的content部分包含了 border 和 pading;
w3c盒模型: 內(nèi)容(content)蘸际、填充(padding)、邊界(margin)徒扶、 邊框(border).
影響盒子模型大小的包括content+padding+border
46粮彤,談?wù)凾his對(duì)象的理解。
this是js的一個(gè)關(guān)鍵字姜骡,隨著函數(shù)使用場合不同导坟,this的值會(huì)發(fā)生變化。
但是有一個(gè)總原則圈澈,那就是this指的是調(diào)用函數(shù)的那個(gè)對(duì)象惫周。
this一般情況下:是全局對(duì)象Global。 作為方法調(diào)用康栈,那么this就是指這個(gè)對(duì)象
47递递,以下代碼的執(zhí)行結(jié)果是
<script>
function fn() {
this.a = 0;
this.b = function() {
alert(this.a)
}
}
fn.prototype = {
b: function() {
this.a = 20;
alert(this.a);
},
c: function() {
this.a = 30;
alert(this.a);
}
}
var myfn = new fn();
myfn.b();
myfn.c();
</script>
結(jié)果
1喷橙,0
2,30
48,css3中transform可以設(shè)置哪些樣式登舞?
transform:rotate(9deg) scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg);//旋轉(zhuǎn),縮放,定位,傾斜
49重慢,簡述對(duì)‘use strict’怎么理解?
好處:
1逊躁,定義變量似踱,必須加var
2,if稽煤,for等語句里不能加函數(shù)
3核芽,干掉了with
作用域
1,作用在script標(biāo)簽內(nèi)部
2酵熙,可以作用在函數(shù)內(nèi)部
3轧简,放在整個(gè)js文件開頭
50,getStyle(obj匾二,‘width’)和obj.offsetWith有什么區(qū)別
function getStyle(obj,name){
return (obj.currentStyle?obj.currentStyle[name]:getComputedStyle(obj,false))[name];
}