1恨憎、什么是JavaScript咕痛?
基于對(duì)象和事件驅(qū)動(dòng)可解釋性腳本語(yǔ)言
2、JavaScript與ECMAScript的關(guān)系喇嘱?
JavaScript是ECMAScript的表現(xiàn)茉贡,ECMAScript是JavaScript的規(guī)范
3、變量的命名規(guī)則者铜?
1.名字見(jiàn)名知義腔丧,遵循駝峰標(biāo)識(shí)。例:userName passWord
2.變量名只能以字母,_,$開(kāi)頭
3.不能使用關(guān)鍵和保留字
4.變量名不要相同(后面的會(huì)覆蓋前面)
4作烟、window.onload的作用愉粤?
window.onload是等文檔和資源都加載完成后調(diào)用的事件,保證js獲取元素的時(shí)候拿撩,已經(jīng)加載衣厘。
5、js數(shù)據(jù)類(lèi)型?
基本數(shù)據(jù)類(lèi)型:Number String Boolean null undefined
復(fù)雜類(lèi)型:Object(array影暴,function,object)
6错邦、js有哪些內(nèi)置對(duì)象?
數(shù)據(jù)封裝類(lèi)對(duì)象:Object型宙、Array撬呢、Boolean、Number 和 String
其他對(duì)象:Function妆兑、Arguments魂拦、Math、Date搁嗓、RegExp晨另、Error
7、this對(duì)象的理解
this存在任何地方谱姓,不同環(huán)境代表不同的含義,取決于調(diào)用時(shí)的環(huán)境刨晴。
A.事件處理函數(shù)中的this---觸發(fā)事件的對(duì)象
document.onclick = function(){ alert(this) }
B.普通函數(shù)中的this---window
function sum(){ alert(this)} sum()
8屉来、eval是做什么的?
它的功能是把對(duì)應(yīng)的字符串解析成JS代碼并運(yùn)行狈癞;
應(yīng)該避免使用eval茄靠,不安全,非常耗性能(2次蝶桶,一次解析成js語(yǔ)句慨绳,一次執(zhí)行)。
由JSON字符串轉(zhuǎn)換為JSON對(duì)象的時(shí)候可以用eval真竖,var obj =eval('('+ str +')')脐雪。
9、null和undefined的區(qū)別恢共?
undefined:
(1)變量被聲明了战秋,但沒(méi)有賦值時(shí),就等于undefined讨韭。
(2) 調(diào)用函數(shù)時(shí)脂信,應(yīng)該提供的參數(shù)沒(méi)有提供,該參數(shù)等于undefined透硝。
(3)對(duì)象沒(méi)有賦值的屬性狰闪,該屬性的值為undefined。
(4)函數(shù)沒(méi)有返回值時(shí)濒生,默認(rèn)返回undefined埋泵。
Undefined:訪問(wèn)一個(gè)未初始化變量(聲明完沒(méi)有賦值的變量)返回的值,表示空變量
null:
(1) 作為函數(shù)的參數(shù)罪治,表示該函數(shù)的參數(shù)不是對(duì)象秋泄。
(2) 作為對(duì)象原型鏈的終點(diǎn)琐馆。
Null訪問(wèn)一個(gè)不存在對(duì)象返回的值,表示空對(duì)象恒序,轉(zhuǎn)為數(shù)值時(shí)為NaN瘦麸。
10、運(yùn)算符的種類(lèi)歧胁?
算術(shù)運(yùn)算符滋饲,賦值運(yùn)算符,比較運(yùn)算符喊巍,邏輯運(yùn)算符屠缭,三目運(yùn)算符
4、☆var a = 10;var b = a++; a崭参、b最后的結(jié)果是呵曹?
a=11 b=10
11、“==”與“===”的區(qū)別何暮?
==,判斷相等奄喂,判斷的過(guò)程中會(huì)隱式轉(zhuǎn)換為number類(lèi)型進(jìn)行比較 “10”==10 true
=== 恒等,嚴(yán)格相等海洼,“10”===10 false
12跨新、☆console.log(0.1+0.2 == 0.3)。
False坏逢,有些小數(shù)在運(yùn)算的過(guò)程中會(huì)出現(xiàn)偏差域帐,因此最好不要用小數(shù)作為判斷條件
13、☆NaN會(huì)在什么樣的情況下出現(xiàn)呢是整?列舉出現(xiàn)這種情況的代碼肖揣。
NaN:not a number
A.自己定義
B.運(yùn)算過(guò)程中出現(xiàn)錯(cuò)誤,原本應(yīng)該是數(shù)字的地方出現(xiàn)一些不能轉(zhuǎn)換為數(shù)字的值
10+“s” ,Number(“s”),
14浮入、☆列舉三種強(qiáng)制類(lèi)型轉(zhuǎn)換和2種隱式類(lèi)型轉(zhuǎn)換许饿。
Number(“10”); 強(qiáng)轉(zhuǎn)為Number
parseInt(“10.5”);強(qiáng)轉(zhuǎn)為number,取整
parseFloat(“10.5”);強(qiáng)轉(zhuǎn)為number舵盈,保留小數(shù)
String(10); 強(qiáng)轉(zhuǎn)為字符串
10.toString(); 強(qiáng)轉(zhuǎn)為字符串
“10”+20 陋率; 1020 +號(hào)遇到字符串變成連接符,20隱式轉(zhuǎn)換為字符串
1+true; 2 true隱式轉(zhuǎn)換為1
10==“10” “10”隱式轉(zhuǎn)換為10
15秽晚、document.write()與innerHTML的區(qū)別瓦糟?
document.write:
操作body的內(nèi)容
會(huì)覆蓋之前已經(jīng)存在的body中的內(nèi)容,document.write添加的內(nèi)容會(huì)疊加
innerHTML:
操作所有閉合標(biāo)簽的內(nèi)容
會(huì)覆蓋之前的所有內(nèi)容
16赴蝇、寫(xiě)一個(gè)獲取非行間樣式的函數(shù)
function getStyle(elem,attr) {//elem元素,attr屬性
if(elem.currentStyle){//ie
return elem.currentStyle[attr];
}else{//標(biāo)準(zhǔn)
return getComputedStyle(elem)[attr];
}
}
17菩浙、說(shuō)說(shuō)你對(duì)作用域鏈的理解?
作用域鏈?zhǔn)莏s中的一種查找機(jī)制,從當(dāng)前作用域查找劲蜻,當(dāng)前作用域沒(méi)有往上一級(jí)作用域查找陆淀,一直到最外層,如果都找不到則是is not define
作用域鏈?zhǔn)莏s中的一種查找機(jī)制先嬉,從當(dāng)前作用域查找轧苫,當(dāng)前作用域沒(méi)有往上一級(jí)作用域查找,一直到最外層疫蔓,如果都找不到則是is not define
18含懊、請(qǐng)解釋變量提升?
瀏覽器解析js代碼至少會(huì)經(jīng)過(guò)兩個(gè)過(guò)程衅胀,預(yù)解析和逐步執(zhí)行
預(yù)解析:找東西var岔乔,function,如果找到var滚躯,會(huì)在內(nèi)存中存儲(chǔ)變量沒(méi)有值雏门,function則會(huì)存儲(chǔ)整個(gè)函數(shù)
逐步執(zhí)行:逐行執(zhí)行代碼
console.log(a); //undefined 不會(huì)報(bào)錯(cuò) 找到var存儲(chǔ)了變量a,但是沒(méi)有賦值默認(rèn)為undefined
var a = 10; //給內(nèi)存中的a賦值10
console.log(a); //10
//2.function
console.log(sum); //整個(gè)函數(shù)掸掏,找到函數(shù)會(huì)將整個(gè)函數(shù)都存儲(chǔ)在內(nèi)存中
sum(); //存儲(chǔ)了整個(gè)函數(shù)茁影,因此可以在前面調(diào)用
function sum() {
console.log(10+20);
}
19、JavaScript兩種變量范圍有什么不同阅束?
Js中兩種變量,全局變量和局部變量
全局變量:函數(shù)外聲明茄唐,在任何地方都能被修改和訪問(wèn)息裸,會(huì)一直存儲(chǔ)在內(nèi)存中
局部變量:函數(shù)內(nèi)聲明,只能在函數(shù)內(nèi)部使用沪编,出了函數(shù){}就會(huì)被銷(xiāo)毀
20呼盆、定時(shí)器的分類(lèi)?他們的區(qū)別及用法是什么蚁廓?
Js中有兩種定時(shí)器:setInterval:間歇執(zhí)行访圃,setTimeout:延遲執(zhí)行
setInterval(函數(shù),時(shí)間) 時(shí)間單位ms相嵌,
語(yǔ)法:setInterval(function(){},1000); 隔一秒執(zhí)行函數(shù)一次
一般用于倒計(jì)時(shí)腿时,輪播圖
setTimeout(函數(shù),時(shí)間) 時(shí)間單位ms饭宾,
語(yǔ)法:setTimeout(function(){},1000); 延遲一秒執(zhí)行函數(shù)一次批糟,只會(huì)執(zhí)行一次
一般用于廣告,廣告彈出層
21看铆、js有哪些對(duì)象徽鼎?
原生對(duì)象:Object,F(xiàn)unction ,Array, String, Date, Boolean, Number,RegExp,Error
內(nèi)置對(duì)象:Global(全局 window,documet),Math
宿主對(duì)象:DOM BOM
全局對(duì)象:window
22、有這樣一個(gè)url:http://item.taobo.com/item.html?a=1&b=2&c=&d=xxx&e,請(qǐng)寫(xiě)
一段js程序提取url中各個(gè)get參數(shù)(參數(shù)名和參數(shù)個(gè)數(shù)不確定)否淤,將其key-value
形式返回到一個(gè)json結(jié)構(gòu)中悄但,如{a:“1”,b:“2”,c:“”石抡,d:“xxx”檐嚣,e:undefined}
var str = "http://item.taobo.com/item.html?a=1&b=2&c=&d=xxx&e";
var json = {}; //存儲(chǔ)
var arr = str.substring(str.indexOf("?")+1).split("&");//獲取汁雷?后面的净嘀,并且按&分割
for(var i = 0;i<arr.length;i++){
var a = arr[i].split("=");
json[a[0]] = a[1]||"";
}
console.log(json);
var json = {}; //存儲(chǔ)
var arr = str.substring(str.indexOf("?")+1).split("&");//獲取侠讯?后面的挖藏,并且按&分割
for(var i = 0;i
var a = arr[i].split("=");
json[a[0]] = a[1]||"";
}
console.log(json);</pre>
23、DOM怎樣添加厢漩、移除膜眠、移動(dòng)、復(fù)制溜嗜、創(chuàng)建和查找節(jié)點(diǎn)
獲取子節(jié)點(diǎn)
父節(jié)點(diǎn).children
父節(jié)點(diǎn).childNodes
獲取父節(jié)點(diǎn)
子節(jié)點(diǎn).parentNode
子節(jié)點(diǎn).offsetParent
創(chuàng)建
document.createElement(‘標(biāo)簽名’)
document.createTextNode(‘文本內(nèi)容’)
添加
父節(jié)點(diǎn).appendChild(子節(jié)點(diǎn))
父節(jié)點(diǎn).insertBefore(newChild宵膨,refChild)
復(fù)制
被復(fù)制的節(jié)點(diǎn).cloneNode(true)
刪除:
節(jié)點(diǎn).remove()
父節(jié)點(diǎn).removeChild(子節(jié)點(diǎn))
替換
父節(jié)點(diǎn).replaceChild(newChild,refChild)
24炸宵、new操作符具體干了什么呢?
(1)創(chuàng)建一個(gè)空對(duì)象辟躏,并且 this 變量引用該對(duì)象,同時(shí)還繼承了該函數(shù)的原型土全。
(2)屬性和方法被加入到 this 引用的對(duì)象中捎琐。
(3)新創(chuàng)建的對(duì)象由 this 所引用,并且最后隱式的返回 this 裹匙。
25瑞凑、JSON 的了解?
JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式概页。它是基于JavaScript的一個(gè)子集籽御。數(shù)據(jù)格式簡(jiǎn)單, 易于讀寫(xiě), 占用帶寬小。
格式:采用鍵值對(duì)惰匙,例如:{'age':'12', 'name':'back'}
26技掏、call() 和 apply() 的區(qū)別和作用?
apply()函數(shù)有兩個(gè)參數(shù):第一個(gè)參數(shù)是上下文项鬼,第二個(gè)參數(shù)是參數(shù)組成的數(shù)組零截。如果上下文是null,則使用全局對(duì)象代替秃臣。
如:function.apply(this,[1,2,3]);
call()的第一個(gè)參數(shù)是上下文涧衙,后續(xù)是實(shí)例傳入的參數(shù)序列哪工。
如:function.call(this,1,2,3);
27、哪些常見(jiàn)操作會(huì)造成內(nèi)存泄漏弧哎?
內(nèi)存泄漏指任何對(duì)象在您不再擁有或需要它之后仍然存在雁比。
垃圾回收器定期掃描對(duì)象,并計(jì)算引用了每個(gè)對(duì)象的其他對(duì)象的數(shù)量撤嫩。如果一個(gè)對(duì)象的引用數(shù)量為 0(沒(méi)有其他對(duì)象引用過(guò)該對(duì)象)偎捎,或?qū)υ搶?duì)象的惟一引用是循環(huán)的,那么該對(duì)象的內(nèi)存即可回收序攘。
setTimeout 的第一個(gè)參數(shù)使用字符串而非函數(shù)的話茴她,會(huì)引發(fā)內(nèi)存泄漏。
28程奠、如何解決跨域問(wèn)題
JSONP:
原理是:動(dòng)態(tài)插入script標(biāo)簽丈牢,通過(guò)script標(biāo)簽引入一個(gè)js文件,這個(gè)js文件載入成功后會(huì)執(zhí)行我們?cè)趗rl參數(shù)中指定的函數(shù)瞄沙,并且會(huì)把我們需要的json數(shù)據(jù)作為參數(shù)傳入己沛。
由于同源策略的限制,XmlHttpRequest只允許請(qǐng)求當(dāng)前源(域名距境、協(xié)議申尼、端口)的資源,為了實(shí)現(xiàn)跨域請(qǐng)求垫桂,可以通過(guò)script標(biāo)簽實(shí)現(xiàn)跨域請(qǐng)求师幕,然后在服務(wù)端輸出JSON數(shù)據(jù)并執(zhí)行回調(diào)函數(shù),從而解決了跨域的數(shù)據(jù)請(qǐng)求诬滩。
優(yōu)點(diǎn)是兼容性好霹粥,簡(jiǎn)單易用,支持瀏覽器與服務(wù)器雙向通信碱呼。缺點(diǎn)是只支持GET請(qǐng)求蒙挑。
JSONP:json+padding(內(nèi)填充)宗侦,顧名思義愚臀,就是把JSON填充到一個(gè)盒子里
<script>
function createJs(sUrl){
var oScript = document.createElement('script');
oScript.type = 'text/javascript';
oScript.src = sUrl;
document.getElementsByTagName('head')[0].appendChild(oScript);
}
createJs('jsonp.js');
box({
'name': 'test'
});
function box(json){
alert(json.name);
}
</script>
29、javascript垃圾回收方法
標(biāo)記清除(mark and sweep)
這是JavaScript最常見(jiàn)的垃圾回收方式矾利,當(dāng)變量進(jìn)入執(zhí)行環(huán)境的時(shí)候姑裂,比如函數(shù)中聲明一個(gè)變量,垃圾回收器將其標(biāo)記為“進(jìn)入環(huán)境”男旗,當(dāng)變量離開(kāi)環(huán)境的時(shí)候(函數(shù)執(zhí)行結(jié)束)將其標(biāo)記為“離開(kāi)環(huán)境”舶斧。
垃圾回收器會(huì)在運(yùn)行的時(shí)候給存儲(chǔ)在內(nèi)存中的所有變量加上標(biāo)記,然后去掉環(huán)境中的變量以及被環(huán)境中變量所引用的變量(閉包)察皇,在這些完成之后仍存在標(biāo)記的就是要?jiǎng)h除的變量了
引用計(jì)數(shù)(reference counting)
在低版本IE中經(jīng)常會(huì)出現(xiàn)內(nèi)存泄露茴厉,很多時(shí)候就是因?yàn)槠洳捎靡糜?jì)數(shù)方式進(jìn)行垃圾回收泽台。引用計(jì)數(shù)的策略是跟蹤記錄每個(gè)值被使用的次數(shù),當(dāng)聲明了一個(gè) 變量并將一個(gè)引用類(lèi)型賦值給該變量的時(shí)候這個(gè)值的引用次數(shù)就加1矾缓,如果該變量的值變成了另外一個(gè)怀酷,則這個(gè)值得引用次數(shù)減1,當(dāng)這個(gè)值的引用次數(shù)變?yōu)?的時(shí) 候嗜闻,說(shuō)明沒(méi)有變量在使用蜕依,這個(gè)值沒(méi)法被訪問(wèn)了,因此可以將其占用的空間回收琉雳,這樣垃圾回收器會(huì)在運(yùn)行的時(shí)候清理掉引用次數(shù)為0的值占用的空間样眠。
30、創(chuàng)建對(duì)象的方式翠肘?
1.字面量創(chuàng)建
var obj = {
name:"web",
eat:function(){}
}
缺點(diǎn):代碼冗余檐束,適合單個(gè)對(duì)象創(chuàng)建
2.實(shí)例創(chuàng)建
var obj = new Object();
obj.name = "web";
obj.eat = function(){}
缺點(diǎn):代碼冗余,適合單個(gè)對(duì)象創(chuàng)建
3.工廠模式創(chuàng)建
function createObj(name){
var obj = new Object();
obj.name = name;
obj.eat = function(){}
return obj
}
createObj(“web”);
缺點(diǎn):識(shí)別不明確
4.構(gòu)造函數(shù)創(chuàng)建
function Student(name){
//new Object
this.name = name;
this.eat = function(){}
}
new Student(name)
缺點(diǎn):浪費(fèi)內(nèi)存
5.原型創(chuàng)建
原型對(duì)象:prototype 锯茄,構(gòu)造函數(shù)中厢塘,共享的一塊區(qū)域
原型屬性:proto,實(shí)例對(duì)象中,指向原型對(duì)象
function Student(){}
Student.prototype.name = "web";
Student.prototype.eat = function(){}
new Student();
缺點(diǎn):不能傳參
6.混合創(chuàng)建肌幽,構(gòu)造函數(shù)(可變的)+原型(共享晚碾,不變的)
function Student(name){
this.name = name;
}
Student.prototype.eat = function(){
}
31、列舉IE 與其他瀏覽器不一樣的特性喂急?
(1)IE支持currentStyle格嘁,F(xiàn)Irefox使用getComputStyle
(2)IE 使用innerText,F(xiàn)irefox使用textContent
(3)濾鏡方面:IE:filter:alpha(opacity= num)廊移;Firefox:-moz-opacity:num
(4)事件方面:IE:attachEvent:火狐是addEventListener
(5)鼠標(biāo)位置:IE是event.clientX糕簿;火狐是event.pageX
(6)IE使用event.srcElement;Firefox使用event.target
(7)IE中消除list的原點(diǎn)僅需margin:0即可達(dá)到最終效果狡孔;FIrefox需要設(shè)置margin:0;padding:0以及l(fā)ist-style:none
(8)CSS圓角:ie7以下不支持圓角
32懂诗、怎么解決跨域問(wèn)題?
通過(guò)jsonp解決跨域苗膝,即通過(guò)script標(biāo)簽的src屬性引入一個(gè)js文件殃恒,通過(guò)回調(diào)函數(shù)將數(shù)據(jù)返回
$(“head”).append(‘
同理,如果你的頁(yè)面是utf-8的辱揭,引入的js是gbk的离唐,那么就需要加上charset="gbk".
33、javascript繼承的6種方法
(1)原型鏈繼承
(2)借用構(gòu)造函數(shù)繼承
(3)組合繼承(原型+借用構(gòu)造)
(4)原型式繼承
(5)寄生式繼承
(6)寄生組合式繼承
34问窃、創(chuàng)建ajax的過(guò)程
(1)創(chuàng)建XMLHttpRequest
對(duì)象,也就是創(chuàng)建一個(gè)異步調(diào)用對(duì)象.
(2)創(chuàng)建一個(gè)新的HTTP
請(qǐng)求,并指定該HTTP
請(qǐng)求的方法亥鬓、URL
及驗(yàn)證信息.
(3)設(shè)置響應(yīng)HTTP
請(qǐng)求狀態(tài)變化的函數(shù).
(4)發(fā)送HTTP
請(qǐng)求.
(5)獲取異步調(diào)用返回的數(shù)據(jù).
(6)使用JavaScript和DOM實(shí)現(xiàn)局部刷新.
35、ajax的缺點(diǎn)
(1)ajax不支持瀏覽器back按鈕域庇。
(2)安全問(wèn)題 AJAX暴露了與服務(wù)器交互的細(xì)節(jié)嵌戈。
(3)對(duì)搜索引擎的支持比較弱覆积。
(4)破壞了程序的異常機(jī)制。
(5)不容易調(diào)試熟呛。
40技健、說(shuō)說(shuō)嚴(yán)格模式的限制
嚴(yán)格模式主要有以下限制:
變量必須聲明后再使用
函數(shù)的參數(shù)不能有同名屬性,否則報(bào)錯(cuò)
不能使用with語(yǔ)句
不能對(duì)只讀屬性賦值惰拱,否則報(bào)錯(cuò)
不能刪除不可刪除的屬性雌贱,否則報(bào)錯(cuò)
禁止this指向全局對(duì)象
36、例舉強(qiáng)制類(lèi)型轉(zhuǎn)換和隱式類(lèi)型轉(zhuǎn)換?
強(qiáng)制(parseInt,parseFloat,number)
隱式(== – ===)
37偿短、數(shù)組方法pop() push() unshift() shift()
Push()尾部添加欣孤,pop()尾部刪除;Unshift()頭部添加昔逗,shift()頭部刪除
38降传、ajax請(qǐng)求的時(shí)候get 和post方式的區(qū)別
①一個(gè)在url后面,一個(gè)放在虛擬載體里面勾怒;
②有大小限制婆排;
③安全問(wèn)題;
39笔链、ajax請(qǐng)求時(shí)段只,如何解釋json數(shù)據(jù)
使用eval parse,鑒于安全性考慮鉴扫,使用parse更靠譜赞枕。
40、javascript的同源策略
一段腳本只能讀取來(lái)自于同一來(lái)源的窗口和文檔的屬性坪创,這里的同一來(lái)源指的是主機(jī)名炕婶、協(xié)議和端口號(hào)的組合
41、JavaScript原型莱预,原型鏈 柠掂?
js原型?
js每聲明一個(gè)function依沮,都有prototype原型涯贞,prototype原型是函數(shù)的一個(gè)默認(rèn)屬性,在函數(shù)的創(chuàng)建過(guò)程中由js編譯器自動(dòng)添加悉抵。
也就是說(shuō):當(dāng)生產(chǎn)一個(gè)function對(duì)象的時(shí)候肩狂,就有一個(gè)原型prototype摘完。
當(dāng)你定義一個(gè)函數(shù)對(duì)象的時(shí)候姥饰,其內(nèi)部就有這樣一個(gè)鏈表關(guān)系。實(shí)例化的對(duì)象孝治,自帶了proto的屬性列粪,而這個(gè)屬性指向了prototype审磁,從而實(shí)現(xiàn)對(duì)象的擴(kuò)展(例如繼承等操作)。
42岂座、Javascript作用鏈域?
JavaScript中所有的量都是存在于某一個(gè)作用域中的
除了全局作用域, 每一個(gè)作用域都是存在於某個(gè)作用域中的
在試圖訪問(wèn)一個(gè)變量時(shí)JS引擎會(huì)從當(dāng)前作用域開(kāi)始向上查找直到Global全局作用域停止
43态蒂、什么是閉包(closure),為什么要用它费什?
閉包是指有權(quán)訪問(wèn)另一個(gè)函數(shù)作用域中變量的函數(shù)钾恢,創(chuàng)建閉包的最常見(jiàn)的方式就是在一個(gè)函數(shù)內(nèi)創(chuàng)建另一個(gè)函數(shù),通過(guò)另一個(gè)函數(shù)訪問(wèn)這個(gè)函數(shù)的局部變量,利用閉包可以突破作用鏈域鸳址,將函數(shù)內(nèi)部的變量和方法傳遞到外部瘩蚪。
閉包的特性:
(1)函數(shù)內(nèi)再嵌套函數(shù)
(2)內(nèi)部函數(shù)可以引用外層的參數(shù)和變量
(3)參數(shù)和變量不會(huì)被垃圾回收機(jī)制回收
44、documen.write
和 innerHTML的區(qū)別?
write是DOM方法,向文檔寫(xiě)入HTML表達(dá)式或JavaScript代碼稿黍,可列出多個(gè)參數(shù)疹瘦,參數(shù)被順序添加到文檔中 ;innerHTML是DOM屬性,設(shè)置或返回調(diào)用元素開(kāi)始結(jié)束標(biāo)簽之間的HTML元素巡球。
45言沐、談一下Jquery中的bind(),live(),delegate(),on()的區(qū)別?
bind(type,[data],fn) 為每個(gè)匹配元素的特定事件綁定事件處理函數(shù)
$("a").bind("click",function(){alert("ok");});
live(type,[data],fn) 給所有匹配的元素附加一個(gè)事件處理函數(shù)酣栈,即使這個(gè)元素是以后再添加進(jìn)來(lái)的
$("a").live("click",function(){alert("ok");});
delegate(selector,[type],[data],fn) 指定的元素(屬于被選元素的子元素)添加一個(gè)或多個(gè)事件處理程序险胰,并規(guī)定當(dāng)這些事件發(fā)生時(shí)運(yùn)行的函數(shù)
$("#container").delegate("a","click",function(){alert("ok");})
on(events,[selector],[data],fn) 在選擇元素上綁定一個(gè)或多個(gè)事件的事件處理函數(shù)
差別:
.bind()是直接綁定在元素上
.live()則是通過(guò)冒泡的方式來(lái)綁定到元素上的。更適合列表類(lèi)型的矿筝,綁定到document DOM節(jié)點(diǎn)上鸯乃。和.bind()的優(yōu)勢(shì)是支持動(dòng)態(tài)數(shù)據(jù)。
.delegate()則是更精確的小范圍使用事件代理跋涣,性能優(yōu)于.live()
.on()則是最新的1.9版本整合了之前的三種方式的新事件綁定機(jī)制
46缨睡、你有用過(guò)哪些前端性能優(yōu)化的方法?
(1) 減少http請(qǐng)求次數(shù):CSS Sprites, JS陈辱、CSS源碼壓縮奖年、圖片大小控制合適;網(wǎng)頁(yè)Gzip沛贪,CDN托管陋守,data緩存 ,圖片服務(wù)器利赋。
(2) 前端模板 JS+數(shù)據(jù)水评,減少由于HTML標(biāo)簽導(dǎo)致的帶寬浪費(fèi),前端用變量保存AJAX請(qǐng)求結(jié)果媚送,每次操作本地變量中燥,不用請(qǐng)求,減少請(qǐng)求次數(shù)
(3) 用innerHTML代替DOM操作塘偎,減少DOM操作次數(shù)疗涉,優(yōu)化javascript性能拿霉。
(4) 當(dāng)需要設(shè)置的樣式很多時(shí)設(shè)置className而不是直接操作style。
(5) 少用全局變量咱扣、緩存DOM節(jié)點(diǎn)查找的結(jié)果绽淘。
(6) 圖片預(yù)加載,將樣式表放在頂部闹伪,將腳本放在底部 加上時(shí)間戳沪铭。
(7) 避免在頁(yè)面的主體布局中使用table,table要等其中的內(nèi)容完全下載之后才會(huì)顯示出來(lái)偏瓤,顯示比div+css布局慢峭拘。
47了罪、JS變量命名規(guī)則和規(guī)范
聲明變量:var
當(dāng)創(chuàng)建一個(gè)變量時(shí)會(huì)在內(nèi)存中的棧區(qū)開(kāi)辟一個(gè)新的空間
變量命名規(guī)則和規(guī)范:
規(guī)則:
1.由字母届垫、數(shù)字拇勃、下劃線、$符號(hào)組成已骇,不能以數(shù)字開(kāi)頭
2.不能是關(guān)鍵字和保留字离钝,例如:for,while,this,name
3.區(qū)分大小寫(xiě)
規(guī)范:
1.變量名必須有意義
2.遵守駝峰命名法
3.建議不要用$作為變量名
53、window.onload()和$(function(){});的區(qū)別
1褪储、window.onload必須等到頁(yè)面中所有元素加載完之后才會(huì)執(zhí)行(包括圖片卵渴、視頻等)而$(function(){});是在結(jié)構(gòu)繪制完畢之后執(zhí)行,二者的執(zhí)行時(shí)機(jī)是不同的鲤竹,一般來(lái)說(shuō)后者會(huì)首先執(zhí)行
2浪读、window.onload只能存在一個(gè),即時(shí)存在多個(gè)也只會(huì)執(zhí)行一個(gè)辛藻;而$(function(){})則可以存在多個(gè)碘橘,且多個(gè)都會(huì)執(zhí)行;
3吱肌、window.onload只有一種寫(xiě)法痘拆,而(document).ready(function(){});效果一樣。
484氮墨、js預(yù)解析?
在當(dāng)前作用域下,js運(yùn)行之前纺蛆,會(huì)把帶有var和function關(guān)鍵字的事先聲明,并在內(nèi)存中安排好规揪。然后再?gòu)纳系较聢?zhí)行js語(yǔ)句
49桥氏、js字符串常用方法
charAt(num) // 得到指定索引位置的單字符
charCodeAt(num) // 得到指定索引位置字符的Unicode值
indexOf("str") // 取str第一次出現(xiàn)的索引
replace( "oldStr" , "newStr" ) // 找到oldStr替換為newStr
slice( start , end ) // 其對(duì)象可以是字符串or數(shù)組 , 記得其范圍不包括end
substr( start , length ) // 從索引start開(kāi)始取length個(gè)字符 , length不可小于0否則返回空字符串
50、數(shù)組去重猛铅?
var arr = [1,1,2,3,4,2,2,2];
for(var i=0;i<arr.length;i++){
for(var j=i+1;j<arr.length;j++){
if(arr[i] == arr[j]){
arr.splice(j,1);
j--;
}
}
}
console.log(arr);
51字支、Table 對(duì)象集合有哪些?
cells[] 返回包含表格中所有單元格的一個(gè)數(shù)組。
語(yǔ)法:tableObject.cells[]
rows[] 返回包含表格中所有行的一個(gè)數(shù)組祥款。
rows 集合返回表格中所有行的一個(gè)數(shù)組。該集合包括 thead月杉、tfoot 和 tbody 中定義的所有行刃跛。
tBodies[] 返回包含表格中所有 tbody 的一個(gè)數(shù)組。
52苛萎、BOM對(duì)象里面的常用方法
close():關(guān)閉窗口
print():打印窗口
open([url],[name],[options]):打開(kāi)一個(gè)新窗口
window.setTimeout(“code”,1000);
53桨昙、BOM對(duì)象有哪些,列舉window對(duì)象腌歉?
1蛙酪、window對(duì)象 ,是JS的最頂層對(duì)象翘盖,其他的BOM對(duì)象都是window對(duì)象的屬性桂塞;
2、document對(duì)象馍驯,文檔對(duì)象阁危;
3、location對(duì)象汰瘫,瀏覽器當(dāng)前URL信息狂打;
4、navigator對(duì)象混弥,瀏覽器本身信息趴乡;
5、screen對(duì)象蝗拿,客戶端屏幕信息晾捏;
6、history對(duì)象哀托,瀏覽器訪問(wèn)歷史信息粟瞬;
54、 jQuery 庫(kù)中的 $() 是什么萤捆?
() 函數(shù)用于將任何對(duì)象包裹成 jQuery 對(duì)象辛慰,接著你就被允許調(diào)用定義在 jQuery 對(duì)象上的多個(gè)不同方法区匠。你甚至可以將一個(gè)選擇器字符串傳入 $() 函數(shù),它會(huì)返回一個(gè)包含所有匹配的 DOM 元素?cái)?shù)組的 jQuery 對(duì)象。這個(gè)問(wèn)題我已經(jīng)見(jiàn)過(guò)好幾次被提及驰弄,盡管它非陈樘基礎(chǔ),它經(jīng)常被用來(lái)區(qū)分一個(gè)開(kāi)發(fā)人員是否了解 jQuery戚篙。
55五鲫、$(this) 和 this 關(guān)鍵字在 jQuery 中有何不同?(答案如下)
這對(duì)于很多 jQuery 初學(xué)者來(lái)說(shuō)是一個(gè)棘手的問(wèn)題岔擂,其實(shí)是個(gè)簡(jiǎn)單的問(wèn)題位喂。() 函數(shù)包裹聋呢,例如 $(this)。
56颠区、JQuery有幾種選擇器?
(1)削锰、基本選擇器:#id,class,element,*;
(2)毕莱、層次選擇器:parent>child器贩,prev+next,prev~siblings
(3)朋截、基本過(guò)濾器選擇器::first蛹稍,:last,:not部服,:even唆姐,:odd,:eq廓八,:gt奉芦,:lt
(4)、內(nèi)容過(guò)濾器選擇器::contains剧蹂,:empty声功,:has,:parent
(5) 宠叼、可見(jiàn)性過(guò)濾器選擇器::hidden先巴,:visible
57、jQuery 有哪些好處?
jQuery 是輕量級(jí)的 javascript 框架
強(qiáng)大的選擇器
出色的 DOM 操作的封裝
可靠的事件處理機(jī)制
完善的 ajax 封裝
出色的瀏覽器的兼容性
支持鏈?zhǔn)讲僮魃祢牵[式迭代
支持豐富的插件
58摩渺、為什么要使用jquery?
因?yàn)閖Query是輕量級(jí)的框架剂邮,大小不到30kb,它有強(qiáng)大的選擇器摇幻,出色的DOM操作的封裝,有可靠的事件處理機(jī)制(jQuery在處理事件綁定的時(shí)候相當(dāng)?shù)目煽?抗斤,完善的ajax(它的ajax封裝的非常的好囚企,不需要考慮復(fù)雜瀏覽器的兼容性和XMLHttpRequest對(duì)象的創(chuàng)建和使用的問(wèn)題丈咐。) 出色的瀏覽器的兼容性瑞眼。 而且支持鏈?zhǔn)讲僮鳎[式迭代棵逊。行為層和結(jié)構(gòu)層的分離伤疙,還支持豐富的插件,jquery的文檔也非常的豐富辆影。
59徒像、jquery對(duì)象和dom對(duì)象是怎樣轉(zhuǎn)換的?
jquery轉(zhuǎn)DOM對(duì)象:jQuery 對(duì)象是一個(gè)數(shù)組對(duì)象蛙讥,可以通過(guò)[index]的豐富得到相應(yīng)的DOM對(duì)象還可以通過(guò)get[index]去得到相應(yīng)的DOM對(duì)象锯蛀。DOM對(duì)象轉(zhuǎn)jQuery對(duì)象:$(DOM對(duì)象)
60、如何使用jquery中的ajax的次慢?
如果是一些常規(guī)的ajax程序的話旁涤,使用load(),.post(),就可以搞定了,一般我會(huì)使用的是.ajax()
61、在jquery中你是如何去操作樣式的闻妓?
addClass() 來(lái)追加樣式 菌羽,removeClass() 來(lái)刪除樣式,toggle() 來(lái)切換樣式
62由缆、jquery中的動(dòng)畫(huà)注祖,是怎樣用的?
hide() 和 show() 同時(shí)修改多個(gè)樣式屬性均唉。像高度氓轰,寬度,不透明度浸卦。 fadeIn() 和fadeOut() fadeTo() 只改變不透明度
slideUp() 和 slideDown() slideToggle() 只改變高度
animate() 屬于自定義動(dòng)畫(huà)的方法.
63署鸡、jquery中使用過(guò)哪些插入節(jié)點(diǎn)的方法,它們的區(qū)別是什么?
append(),appendTo(),prepend(),prependTo(),after(),insertAfter()靴庆,before(),insertBefore() 大致可以分為 內(nèi)部追加和外部追加append() 表式向每個(gè)元素內(nèi)部追加內(nèi)容时捌。appendTo()表示 講所有的元素追加到指定的元素中。例$(A)appendTo(B) 是將A追加到B中下面的方法解釋類(lèi)似炉抒。
64奢讨、js去除字符串空格(空白符)
使用js去除字符串內(nèi)所帶有空格,有以下三種方法:
( 1 ) replace正則匹配方法
去除字符串內(nèi)所有的空格:str = str.replace(/\s*/g,"");
去除字符串內(nèi)兩頭的空格:str = str.replace(/^\s|\s$/g,"");
去除字符串內(nèi)左側(cè)的空格:str = str.replace(/^\s*/,"");
去除字符串內(nèi)右側(cè)的空格:str = str.replace(/(\s*$)/g,"");
( 2 ) str.trim()方法
trim()方法是用來(lái)刪除字符串兩端的空白字符并返回焰薄,trim方法并不影響原來(lái)的字符串本身拿诸,它返回的是一個(gè)新的字符串。
缺陷:只能去除字符串兩端的空格塞茅,不能去除中間的空格
65亩码、什么是window對(duì)象? 什么是document對(duì)象?
window是js中最大的對(duì)象,表示窗口野瘦,包含document
document文檔對(duì)象描沟,表示HTML
66、offsetWidth鞭光、clientWidth吏廉、scrollTop的區(qū)別?
offsetWidth:占位寬惰许,包含 內(nèi)容寬+左右padding+左右border
clientWidth:可視寬席覆,包含 內(nèi)容寬+左右padding
scrollTop:頁(yè)面被卷去的高
67、如何獲取url地址中搜索內(nèi)容汹买?
window.location.search
68佩伤、事件、IE與火狐的事件機(jī)制有什么區(qū)別卦睹?
IE的事件流是冒泡流畦戒,而火狐同時(shí)支持冒泡流和捕獲流。
69结序、如何阻止冒泡障斋?
ev.stopPropagation?ev.stopPropagation():ev.cancelBubble = true;
70、事件綁定和普通事件有什么區(qū)別徐鹤。
標(biāo)簽.事件:如果給同一個(gè)元素添加同一個(gè)事件垃环,后面的會(huì)覆蓋前面
事件綁定:可以給同一個(gè)元素添加同一個(gè)事件,不會(huì)被覆蓋
71返敬、如何用原生js給元素綁定兩個(gè)click事件遂庄?
oDiv.addEventListener('click',fun1);
oDiv.addEventListener('click',fun2);
72、解釋一下事件流劲赠?
事件捕獲階段:當(dāng)事件發(fā)生的時(shí)候涛目,將事件從window依次往子元素傳遞
確定目標(biāo)階段:確定事件目標(biāo)
事件冒泡階段:事件目標(biāo)開(kāi)始處理事件秸谢,處理完以后會(huì)將事件依次傳遞給父元素,一直到window
事件都是在事件冒泡處理,ie只有冒泡
73霹肝、事件委托是什么估蹄。
將所有的操作交給父元素,將事件添加給父元素沫换,父元素接收到這個(gè)事件的發(fā)生臭蚁,找到具體觸發(fā)事件的子元素,讓子元素處理事件
oUl.onclick = function (ev) {
var ev = window.event || ev;
var target = ev.target || ev.srcElement;//ev.srcElement:ie獲取事件目標(biāo)
target.style.background = "orange";
}
74讯赏、給10000個(gè)li添加點(diǎn)擊事件垮兑。
oUl.onclick = function (ev) {
var ev = window.event || ev;
var target = ev.target || ev.srcElement;//ev.srcElement:ie獲取事件目標(biāo)
target.style.background = "orange";
}
75、阻止默認(rèn)行為的三種方式漱挎。
元素.事件添加的事件:retrun false 阻止
元素.addEventListener:ev.preventDefault(); 阻止
元素.attachEvent:ev.retrunValue = false 阻止
76系枪、拖拽效果中有幾種事件?
按下onmousedown识樱,拖拽onmousemove嗤无,彈起onmouseup
77震束、什么是回調(diào)函數(shù)怜庸?
回調(diào)函數(shù)是某個(gè)操作某個(gè)動(dòng)作做完以后調(diào)用的函數(shù)
78、使用正則表達(dá)式驗(yàn)證郵箱垢村。
^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/
79割疾、cookie的利弊?
優(yōu)點(diǎn):極高的擴(kuò)展性和可用性
1.通過(guò)良好的編程嘉栓,控制保存在cookie中的session對(duì)象的大小宏榕。
2.通過(guò)加密和安全傳輸技術(shù)(SSL),減少cookie被破解的可能性侵佃。
3.只在cookie中存放不敏感數(shù)據(jù)麻昼,即使被盜也不會(huì)有重大損失。
4.控制cookie的生命期馋辈,使之不會(huì)永遠(yuǎn)有效抚芦。偷盜者很可能拿到一個(gè)過(guò)期的cookie。
缺點(diǎn):
1.Cookie
數(shù)量和長(zhǎng)度的限制迈螟。每個(gè)domain最多只能有20條cookie叉抡,每個(gè)cookie長(zhǎng)度不能超過(guò)4KB,否則會(huì)被截掉答毫。
2.安全性問(wèn)題褥民。如果cookie被人攔截了,那人就可以取得所有的session信息洗搂。即使加密也與事無(wú)補(bǔ)消返,因?yàn)閿r截者并不需要知道cookie的意義载弄,他只要原樣轉(zhuǎn)發(fā)cookie就可以達(dá)到目的了。
3.有些狀態(tài)不可能保存在客戶端撵颊。例如侦锯,為了防止重復(fù)提交表單,我們需要在服務(wù)器端保存一個(gè)計(jì)數(shù)器秦驯。如果我們把這個(gè)計(jì)數(shù)器保存在客戶端尺碰,那么它起不到任何作用。
因?yàn)檫@些弊端(主要是cookie的大小和多少都受限制译隘,并且每次你請(qǐng)求一個(gè)新的頁(yè)面的時(shí)候Cookie都會(huì)被發(fā)送過(guò)去亲桥,這樣無(wú)形中浪費(fèi)了帶寬,另外cookie還需要指定作用域固耘,不可以跨域調(diào)用)题篷,IE8以后,就出現(xiàn)一個(gè)web storage厅目;它僅僅是為了本地緩存數(shù)據(jù)而存在番枚;但是Cookie也是不可以或缺的:Cookie的作用是與服務(wù)器進(jìn)行交互,作為HTTP規(guī)范的一部分而存在损敷。
80葫笼、JavaScript原型,原型鏈 拗馒?
js每聲明一個(gè)function路星,都有prototype原型,prototype原型是函數(shù)的一個(gè)默認(rèn)屬性诱桂,在函數(shù)的創(chuàng)建過(guò)程中由js編譯器自動(dòng)添加洋丐。
也就是說(shuō):當(dāng)生產(chǎn)一個(gè)function對(duì)象的時(shí)候,就有一個(gè)原型prototype挥等。原型中存儲(chǔ)對(duì)象共享的屬性和方法友绝。
原型鏈:
當(dāng)你定義一個(gè)函數(shù)對(duì)象的時(shí)候,其內(nèi)部就有這樣一個(gè)鏈表關(guān)系肝劲。聲明foo對(duì)象迁客,自帶了proto的屬性,而這個(gè)屬性指向了prototype涡相,從而實(shí)現(xiàn)對(duì)象的擴(kuò)展(例如繼承等操作)
81哲泊、什么是閉包,閉包有什么作用催蝗,說(shuō)說(shuō)你對(duì)閉包的理解切威。
閉包:就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)(函數(shù)里面套函數(shù),內(nèi)部函數(shù)訪問(wèn)外部函數(shù)變量)丙号,
在本質(zhì)上先朦,閉包是將函數(shù)內(nèi)部和函數(shù)外部連接起來(lái)的橋梁缰冤。
作用:閉包中使用的變
量會(huì)一直存儲(chǔ)在內(nèi)存中,類(lèi)似全局變量 喳魏,避免全局污染棉浸,可以解決全局變量的問(wèn)題。
82刺彩、ajax請(qǐng)求的時(shí)候get 和post方式的區(qū)別迷郑,什么時(shí)候用post。
1创倔、GET請(qǐng)求會(huì)將參數(shù)跟在URL后進(jìn)行傳遞嗡害,而POST請(qǐng)求則是作為HTTP消息的實(shí)體內(nèi)容發(fā)送給WEB服務(wù)器。當(dāng)然在Ajax請(qǐng)求中畦攘,這種區(qū)別對(duì)用戶是不可見(jiàn)的
2霸妹、GEt傳輸數(shù)據(jù)容量小,不安全知押,post傳輸數(shù)據(jù)內(nèi)容大叹螟,更加安全;
當(dāng)向服務(wù)器發(fā)送一些數(shù)據(jù)的時(shí)候選擇post比較安全
83台盯、ajax請(qǐng)求時(shí)罢绽,如何解釋json數(shù)據(jù)。
如果是字符串形式的json:eval("("+ajax.response+")")
如果是本地的json文件:JSON.parse(data)
84爷恳、同步和異步的區(qū)別?
異步:客戶端與服務(wù)器請(qǐng)求數(shù)據(jù)的過(guò)程中有缆,可以做其他的事情
同步:客戶端與服務(wù)器請(qǐng)求數(shù)據(jù)的過(guò)程中象踊,不能做其他的事情
85温亲、常見(jiàn)的http狀態(tài)碼?
不需要知道全部杯矩,常見(jiàn)的就可以栈虚,比如200 404 503
200狀態(tài)碼:表示請(qǐng)求已成功,請(qǐng)求所希望的響應(yīng)頭或數(shù)據(jù)體將隨此響應(yīng)返回
201狀態(tài)碼:表示請(qǐng)求成功并且服務(wù)器創(chuàng)建了新的資源史隆,且其 URI 已經(jīng)隨Location 頭信息返回魂务。假如需要的資源無(wú)法及時(shí)建立的話,應(yīng)當(dāng)返回 '202 Accepted'
202狀態(tài)碼:服務(wù)器已接受請(qǐng)求泌射,但尚未處理
301狀態(tài)碼:被請(qǐng)求的資源已永久移動(dòng)到新位置粘姜。服務(wù)器返回此響應(yīng)(對(duì) GET 或 HEAD 請(qǐng)求的響應(yīng))時(shí),會(huì)自動(dòng)將請(qǐng)求者轉(zhuǎn)到新位置熔酷。
302狀態(tài)碼:請(qǐng)求的資源臨時(shí)從不同的URI響應(yīng)請(qǐng)求孤紧,但請(qǐng)求者應(yīng)繼續(xù)使用原有位置來(lái)進(jìn)行以后的請(qǐng)求
304自從上次請(qǐng)求后,請(qǐng)求的網(wǎng)頁(yè)未修改過(guò)拒秘。服務(wù)器返回此響應(yīng)時(shí)号显,不會(huì)返回網(wǎng)頁(yè)內(nèi)容臭猜。 如果網(wǎng)頁(yè)自請(qǐng)求者上次請(qǐng)求后再也沒(méi)有更改過(guò),您應(yīng)將服務(wù)器配置為返回此響應(yīng)(稱(chēng)為 If-Modified-Since HTTP 標(biāo)頭)押蚤。
301狀態(tài)碼:被請(qǐng)求的資源已永久移動(dòng)到新位置蔑歌。服務(wù)器返回此響應(yīng)(對(duì) GET 或 HEAD 請(qǐng)求的響應(yīng))時(shí),會(huì)自動(dòng)將請(qǐng)求者轉(zhuǎn)到新位置揽碘。
302狀態(tài)碼:請(qǐng)求的資源臨時(shí)從不同的URI響應(yīng)請(qǐng)求次屠,但請(qǐng)求者應(yīng)繼續(xù)使用原有位置來(lái)進(jìn)行以后的請(qǐng)求
304自從上次請(qǐng)求后,請(qǐng)求的網(wǎng)頁(yè)未修改過(guò)雳刺。服務(wù)器返回此響應(yīng)時(shí)帅矗,不會(huì)返回網(wǎng)頁(yè)內(nèi)容。 如果網(wǎng)頁(yè)自請(qǐng)求者上次請(qǐng)求后再也沒(méi)有更改過(guò)煞烫,您應(yīng)將服務(wù)器配置為返回此響應(yīng)(稱(chēng)為 If-Modified-Since HTTP 標(biāo)頭)浑此。
401狀態(tài)碼:請(qǐng)求要求身份驗(yàn)證。 對(duì)于需要登錄的網(wǎng)頁(yè)滞详,服務(wù)器可能返回此響應(yīng)凛俱。
403狀態(tài)碼:服務(wù)器已經(jīng)理解請(qǐng)求,但是拒絕執(zhí)行它料饥。與401響應(yīng)不同的是蒲犬,身份驗(yàn)證并不能提供任何幫助,而且這個(gè)請(qǐng)求也不應(yīng)該被重復(fù)提交岸啡。
404狀態(tài)碼:請(qǐng)求失敗原叮,請(qǐng)求所希望得到的資源未被在服務(wù)器上發(fā)現(xiàn)。沒(méi)有信息能夠告訴用戶這個(gè)狀況到底是暫時(shí)的還是永久的巡蘸。假如服務(wù)器知道情況的話奋隶,應(yīng)當(dāng)使用410狀態(tài)碼來(lái)告知舊資源因?yàn)槟承﹥?nèi)部的配置機(jī)制問(wèn)題,已經(jīng)永久的不可用悦荒,而且沒(méi)有任何可以跳轉(zhuǎn)的地址唯欣。404這個(gè)狀態(tài)碼被廣泛應(yīng)用于當(dāng)服務(wù)器不想揭示到底為何請(qǐng)求被拒絕或者沒(méi)有其他適合的響應(yīng)可用的情況下。
500狀態(tài)碼:服務(wù)器遇到了一個(gè)未曾預(yù)料的狀況搬味,導(dǎo)致了它無(wú)法完成對(duì)請(qǐng)求的處理境氢。一般來(lái)說(shuō),這個(gè)問(wèn)題都會(huì)在服務(wù)器的程序碼出錯(cuò)時(shí)出現(xiàn)碰纬。
503狀態(tài)碼:由于臨時(shí)的服務(wù)器維護(hù)或者過(guò)載萍聊,服務(wù)器當(dāng)前無(wú)法處理請(qǐng)求。通常悦析,這個(gè)是暫時(shí)狀態(tài)寿桨,一段時(shí)間會(huì)恢復(fù)
86、eval的作用是她按?
eval:計(jì)算某個(gè)字符串牛隅,并且執(zhí)行其中的JavaScript代碼
console.log(eval("2+3")); //5
console.log(res); //'["img/1.jpg","img/2.jpg","img/3.jpg","img/4.jpg"]'
console.log(eval(res)); //(4) ["img/1.jpg", "img/2.jpg", "img/3.jpg", "img/4.jpg"]
87炕柔、js哪些操作會(huì)造成內(nèi)存泄露?
1)意外的全局變量引起的內(nèi)存泄露
function leak(){
leak="xxx";//leak成為一個(gè)全局變量媒佣,不會(huì)被回收
}
2)被遺忘的定時(shí)器或者回調(diào)
3)閉包引起的內(nèi)存泄漏
88匕累、$(document).ready() 方法和window.onload 有什么區(qū)別?
1.執(zhí)行時(shí)間不同
window.onload必須等到頁(yè)面內(nèi)包括圖片的所有元素加載完畢后才能執(zhí)行默伍。
$(document).ready()是DOM結(jié)構(gòu)繪制完畢后就執(zhí)行欢嘿,不必等到加載完畢。
2.編寫(xiě)個(gè)數(shù)不同
window.onload不能同時(shí)編寫(xiě)多個(gè)也糊,如果有多個(gè)window.onload方法炼蹦,只會(huì)執(zhí)行一個(gè)
$(document).ready()可以同時(shí)編寫(xiě)多個(gè),并且都可以得到執(zhí)行
3.簡(jiǎn)化寫(xiě)法不同
window.onload沒(méi)有簡(jiǎn)化寫(xiě)法
(function(){});
89狸剃、jQuery 的屬性拷貝(extend)的實(shí)現(xiàn)原理是什么掐隐,如何實(shí)現(xiàn)深拷貝?
在默認(rèn)情況下钞馁,通過(guò)$.extend()合并操作不是遞歸的(淺拷貝);如果第一個(gè)對(duì)象的屬性本身是一個(gè)對(duì)象或數(shù)組虑省,那么它將完全用第二個(gè)對(duì)象相同的key重寫(xiě)一個(gè)屬性。這些值不會(huì)被合并僧凰。然而探颈,如果將 true 作為該函數(shù)的第一個(gè)參數(shù),那么會(huì)在對(duì)象上進(jìn)行遞歸的合并(深拷貝)训措。
淺拷貝(false 默認(rèn)):如果第二個(gè)參數(shù)對(duì)象有的屬性第一個(gè)參數(shù)對(duì)象也有伪节,那么不會(huì)進(jìn)行相同參數(shù)內(nèi)部的比較,直接將第一個(gè)對(duì)象的相同參數(shù)覆蓋绩鸣。
深拷貝(true):如果第二個(gè)參數(shù)對(duì)象有的屬性第一個(gè)參數(shù)對(duì)象也有怀大,還要繼續(xù)在這個(gè)相同的參數(shù)向下一層找,比較相同參數(shù)的對(duì)象中是否還有不一樣的屬性全闷,如果有叉寂,將其繼承到第一個(gè)對(duì)象,如果沒(méi)有总珠,則覆蓋。
90勘纯、().prop()的區(qū)別?
對(duì)于HTML元素本身就帶有的固有屬性局服,在處理時(shí),使用prop方法驳遵。
對(duì)于HTML元素我們自己自定義的DOM屬性淫奔,在處理時(shí),使用attr方法堤结。
$("#chk1").prop("checked") == false
$("#chk2").prop("checked") == true
如果上面使用attr方法唆迁,則會(huì)出現(xiàn):
$("#chk1").attr("checked") == undefined
91鸭丛、jquery中.post()提交有區(qū)別嗎?
get一般用來(lái)進(jìn)行查詢(xún)操作唐责,url地址有長(zhǎng)度限制鳞溉,請(qǐng)求的參數(shù)都暴露在url地址當(dāng)中,如果傳遞中文參數(shù)鼠哥,需要自己進(jìn)行編碼操作熟菲,安全性較低。
post請(qǐng)求方式主要用來(lái)提交數(shù)據(jù)朴恳,沒(méi)有數(shù)據(jù)長(zhǎng)度的限制抄罕,提交的數(shù)據(jù)內(nèi)容存在于http請(qǐng)求體中,數(shù)據(jù)不會(huì)暴漏在url地址中于颖。