js 比較運(yùn)算, 如果字符串和數(shù)值比較會(huì)先將字符串轉(zhuǎn)為數(shù)值再進(jìn)行比較
如果是對(duì)象和字符串比較則會(huì)調(diào)用對(duì)象的valueOf()方法
null==undefined
js 中l(wèi)abel使用 提高性能
start:for(){
for(){
? ?break start;
}
}
js 垃圾回收
1、標(biāo)記清除
先將全部變量進(jìn)行標(biāo)記钱反,再取消現(xiàn)環(huán)境的變量及由變量引用的變量,再將沒有取消的變量清除分配的內(nèi)存
2剩檀、引用計(jì)數(shù)
在循環(huán)引用中容易造成內(nèi)存溢出
可手動(dòng)執(zhí)行垃圾回收
collectGarbage
確定占用最小的內(nèi)存使頁(yè)面擁有更好的性能铲汪,可以在變量使用后手動(dòng)至為null
js中 function和new function的區(qū)別
new function返回的是對(duì)象,當(dāng)function中有return的時(shí)候塑悼,new function返回的是對(duì)象,function根據(jù)return的類型不同返回的不同楷掉,如果返回的是對(duì)象則為對(duì)象如果返回的是字符串則為字符串,new function可獲取this對(duì)象厢蒜,function則不會(huì)如:
var a ={"AAA":"ssss''}
a.AAA與a["AAA"]區(qū)別,用中括號(hào)可以通過變量的方式訪問如 var keyName = "AAA" ,a[keyName],或者當(dāng)key為關(guān)鍵字或含有空格或.標(biāo)識(shí)等時(shí)用中括號(hào)獲取
js數(shù)組
Array.length 非只讀烹植,可以根據(jù)設(shè)置length動(dòng)態(tài)添加或修改數(shù)組尾值
數(shù)組棧的方式存儲(chǔ)斑鸦,后進(jìn)先出 last in first out
push 再數(shù)組后面添加新的元素
?pop 獲取最后一個(gè)元素
shift 獲取第一個(gè)元素
unshift 在數(shù)組最前面添加元素
concat 復(fù)制原數(shù)組后創(chuàng)建新的數(shù)組
slice 選擇性賦值新建新的數(shù)組,傳一個(gè)或兩個(gè)參數(shù)草雕,表明將要復(fù)制的原數(shù)組位置
splice 非常強(qiáng)大的方法巷屿,對(duì)數(shù)組任意位置進(jìn)行刪除,插入墩虹,更換
splice(0嘱巾,2)刪除數(shù)組前兩個(gè)元素
splice(2,0,"aa","bb","cc")在數(shù)組第二個(gè)位置后面诫钓,“刪除0個(gè)元素”旬昭,并在后面添加“aa”“bb”“”“cc”元素
splice(2,1,"aa","bb")在第二個(gè)元素后面,刪除1個(gè)元素并插入“aa”“bb”
數(shù)組的indexOf發(fā)現(xiàn)個(gè)有意思的尖坤,indexOf在查找匹配時(shí)遵循的是===稳懒,也就是說元素必須完全一致,包括了指向的地址如
var ob = {"aa":"aa"};
var arrTest1 =[ {"aa":"aa"}];
var arrTest2 =[ ob];
arrTest1.indexOf(ob);//-1
arrTest2.indexOf(ob);//0
數(shù)組的五大迭代方法 都是傳遞三個(gè)參數(shù)分別為慢味,節(jié)點(diǎn)元素场梆,節(jié)點(diǎn)位置,循環(huán)數(shù)組
every(function(value,index,arr){
//如果此函數(shù)對(duì)每一項(xiàng)都返回true纯路;則every方法返回true
})
some(function(value,index,arr){
//如果此函數(shù)對(duì)任意一項(xiàng)都返回true或油;則every方法返回true
})
forEach(function(value,index,arr){
//每一項(xiàng)都執(zhí)行該函數(shù),無(wú)返回值
})
filter(function(value,index,arr){
//過濾篩選將該函數(shù)返回true的值進(jìn)行filter返回(數(shù)組返回)
})
map?(function(value,index,arr){
//將此返回的返回值生成新的數(shù)組有map返回
})
reduce 縮小數(shù)組方法驰唬,傳遞四個(gè)參數(shù)顶岸,第一個(gè)數(shù)組值腔彰,第二個(gè)數(shù)組值,循環(huán)的位置辖佣,數(shù)組對(duì)象
每次迭代都會(huì)將結(jié)果作為第一個(gè)數(shù)組值傳遞到下一次迭代中
function 兩個(gè)屬性霹抛,length 獲取方法需要的參數(shù)個(gè)數(shù)
String 三個(gè)方法
slice(param1,param2)//第一個(gè)參數(shù)開始位置,第二個(gè)參數(shù)結(jié)束位置
subString(param1,param2)//第一個(gè)參數(shù)開始位置卷谈,第二個(gè)參數(shù)結(jié)束位置
substr(param1,param2)//第一個(gè)參數(shù)開始位置杯拐,第二個(gè)截取幾個(gè)
參數(shù)為負(fù)數(shù)時(shí) slice將參數(shù)與字符串長(zhǎng)度相加
subString 將負(fù)數(shù)都轉(zhuǎn)為0
substr 將第一個(gè)參數(shù)與字符串長(zhǎng)度相加,第二個(gè)參數(shù)轉(zhuǎn)為0
替換 js中的replace方法并沒有像java中replaceAll方法想要達(dá)到全部替換可以用正則/g
如
var hello = "hello word";
hello.replace(/o/g,'w');
也可以用一些特殊的字符序列
$1表示最新匹配到的字符串
var test = 'ABC,CBC,DBC';
test.replace(/(.BC)/g,'都是BC($1)');
replace第二個(gè)參數(shù)也可以傳方法世蔗,方法捕獲組的匹配項(xiàng)端逼,參數(shù)位置,原字符串
如
var str= 'abcdefg';
str.replace(/[a d&]/g,function(match,pos,str){console.log(str+'原字符串'+match);return '替換為'})
采用塊級(jí)作用于可以降低閉包占用的內(nèi)存問題污淋,減少命名沖突及減少作用域鏈
location.href
location.assign
location.replace區(qū)別
href實(shí)際上也是調(diào)用的assign顶滩,href和assign會(huì)產(chǎn)生歷史記錄,replace不會(huì)產(chǎn)生歷史記錄寸爆,也防止了gohistory
jQuery 對(duì)象和dom互相轉(zhuǎn)化
通過jQuery 獲取對(duì)象var jele = $('#elem')與dom獲取的對(duì)象不同礁鲁,
var delem = document.getElementById("elem"),因此兩者不能互用對(duì)象屬性及方法,
兩者互相轉(zhuǎn)換方式如下
jele[0] == delem
$(delem) == jele
h5 中innerHtml雖然很方便而昨,但多次使用會(huì)降低性能救氯,因?yàn)槊看问褂胕nnerHtml或outHtml就會(huì)創(chuàng)建一個(gè)新的解析器
在綁定事件中盡量用js綁定事件而不用html事件處理,這樣可以避免當(dāng)js沒有加載完用戶點(diǎn)擊造成當(dāng)js報(bào)錯(cuò)如
<input id="btn_show" type="button" onclick="showMsg()">
function showMsg(){
}
<input id="btn_show" type="button">
$("#btn_show").click(function(){
? ? ? ? showMsg();
})
未完待續(xù)歌憨。。墩衙。务嫡。。漆改。心铃。