五段實(shí)用的js高級(jí)技巧
更新時(shí)間:2011年12月20日 00:38:40 作者:
五段實(shí)用的js高級(jí)技巧,一些不錯(cuò)的小技巧,學(xué)習(xí)js的朋友可以看看。
技巧一之setTimeout.
應(yīng)用案例:比如你想一個(gè)函數(shù)循環(huán)執(zhí)行10次,怎么辦?以前通常是先setInterval,然后clearInterval,技巧一就是克服這個(gè)問題
(function () {
var i = 0;
function job() {
console.log(i++);
if (i < 10) {
setTimeout(job, 1000);
}
}
job();
})();
上面這個(gè)job函數(shù)就只會(huì)乖乖的執(zhí)行10次.然后自動(dòng)停止
技巧二之高效的for循環(huán)
應(yīng)用案例:拋棄傳統(tǒng)的循環(huán)方式
(function () {
var arr=[];
for(var i=arr.length;i--;){
doStuff();
}
})();
這個(gè)方式為什么高效?
一:少了一個(gè)參數(shù)l=arr.length;
二:for語句中間那個(gè)玩意少進(jìn)行了一次計(jì)算,以前的話是for(i=0;i<l;i++)這樣的話中間的語句會(huì)先比較i<l 然后比較出來的結(jié)果在
跟true 或者false比較,自然多了次計(jì)算
技巧三之高效賦值
應(yīng)用案例:拋棄傳統(tǒng)的if判斷賦值
var i=1,ret;
ret=i!==1||true;
console.log(ret);
以上代碼會(huì)很神奇的告訴你ret會(huì)是true.高效吧不用if(i!==1)了在賦值了
技巧四之強(qiáng)悍的簡(jiǎn)短的attr
應(yīng)用案例:setAttribute,getAttribute.這個(gè)方法不僅可以設(shè)置標(biāo)準(zhǔn)的屬性,還可以設(shè)置任意屬性,兼容好
function attr(elem, name, value) {
var ret;
if (value) {
if (/msie [6-7]\.0/i.test(navigator.userAgent)) {
ret = elem.getAttributeNode(name);
if (!ret) { //ie6 7不合法的屬性設(shè)置捕鳥,通過這里可以設(shè)置
ret = document.createAttribute(name);
elem.setAttributeNode(ret);
}
ret.nodeValue = value + "";
} else {
elem.setAttribute(name, value);
}
return elem;
} else { //ie6 7有得屬性獲取不鳥
ret = elem.getAttribute(name);
fixIe = elem.getAttributeNode(name).nodeValue;
ret = ret ? ret : fixIe ? fixIe : undefined;
return ret;
}
}
以上方法如何測(cè)試呢?
attr(document.getElementById("test"), "classxx", "xx")
alert(attr(document.getElementById("test"),"classxx"));
技巧五之getElementsByClassName.
應(yīng)用案例 :以前js沒什么框架的時(shí)候,大家都再模仿這個(gè)方法,看看今天我是怎么高效的模仿出它來.這也不愧是js初學(xué)者的經(jīng)典代碼
(function () {
var getElementsByClassName=function(cls,context){
var root = context || document;
return document.querySelectorAll ? root.querySelectorAll("." + cls) : root.getElementsByClassName ?
root.getElementsByClassName(cls) : help("*", cls, context);
}
var help=function(tagName,cls,context){
var root= context || document,
ret=[],elems,i,
rcls=new RegExp("^|\\s+"+cls+"\\s+|$");
elems = root.getElementsByTagName(tagName || "*");
for(i=elems.length;i--;){
if(rcls.test(elem[i].className)){
ret.push(elems[i]);
}
}
return ret;
}
})();
以上幾個(gè)js淫蕩技巧還是蠻實(shí)用的,前提是你沒用使用別人的js框架,用原生創(chuàng)造效率為前提的代碼.
還是那句話js代碼愛好者nothing原創(chuàng),謝謝大家支持,覺得寫得好可以頂下,或者把鏈接發(fā)給朋友
應(yīng)用案例:比如你想一個(gè)函數(shù)循環(huán)執(zhí)行10次,怎么辦?以前通常是先setInterval,然后clearInterval,技巧一就是克服這個(gè)問題
復(fù)制代碼 代碼如下:
(function () {
var i = 0;
function job() {
console.log(i++);
if (i < 10) {
setTimeout(job, 1000);
}
}
job();
})();
上面這個(gè)job函數(shù)就只會(huì)乖乖的執(zhí)行10次.然后自動(dòng)停止
技巧二之高效的for循環(huán)
應(yīng)用案例:拋棄傳統(tǒng)的循環(huán)方式
復(fù)制代碼 代碼如下:
(function () {
var arr=[];
for(var i=arr.length;i--;){
doStuff();
}
})();
這個(gè)方式為什么高效?
一:少了一個(gè)參數(shù)l=arr.length;
二:for語句中間那個(gè)玩意少進(jìn)行了一次計(jì)算,以前的話是for(i=0;i<l;i++)這樣的話中間的語句會(huì)先比較i<l 然后比較出來的結(jié)果在
跟true 或者false比較,自然多了次計(jì)算
技巧三之高效賦值
應(yīng)用案例:拋棄傳統(tǒng)的if判斷賦值
復(fù)制代碼 代碼如下:
var i=1,ret;
ret=i!==1||true;
console.log(ret);
以上代碼會(huì)很神奇的告訴你ret會(huì)是true.高效吧不用if(i!==1)了在賦值了
技巧四之強(qiáng)悍的簡(jiǎn)短的attr
應(yīng)用案例:setAttribute,getAttribute.這個(gè)方法不僅可以設(shè)置標(biāo)準(zhǔn)的屬性,還可以設(shè)置任意屬性,兼容好
復(fù)制代碼 代碼如下:
function attr(elem, name, value) {
var ret;
if (value) {
if (/msie [6-7]\.0/i.test(navigator.userAgent)) {
ret = elem.getAttributeNode(name);
if (!ret) { //ie6 7不合法的屬性設(shè)置捕鳥,通過這里可以設(shè)置
ret = document.createAttribute(name);
elem.setAttributeNode(ret);
}
ret.nodeValue = value + "";
} else {
elem.setAttribute(name, value);
}
return elem;
} else { //ie6 7有得屬性獲取不鳥
ret = elem.getAttribute(name);
fixIe = elem.getAttributeNode(name).nodeValue;
ret = ret ? ret : fixIe ? fixIe : undefined;
return ret;
}
}
以上方法如何測(cè)試呢?
attr(document.getElementById("test"), "classxx", "xx")
alert(attr(document.getElementById("test"),"classxx"));
技巧五之getElementsByClassName.
應(yīng)用案例 :以前js沒什么框架的時(shí)候,大家都再模仿這個(gè)方法,看看今天我是怎么高效的模仿出它來.這也不愧是js初學(xué)者的經(jīng)典代碼
復(fù)制代碼 代碼如下:
(function () {
var getElementsByClassName=function(cls,context){
var root = context || document;
return document.querySelectorAll ? root.querySelectorAll("." + cls) : root.getElementsByClassName ?
root.getElementsByClassName(cls) : help("*", cls, context);
}
var help=function(tagName,cls,context){
var root= context || document,
ret=[],elems,i,
rcls=new RegExp("^|\\s+"+cls+"\\s+|$");
elems = root.getElementsByTagName(tagName || "*");
for(i=elems.length;i--;){
if(rcls.test(elem[i].className)){
ret.push(elems[i]);
}
}
return ret;
}
})();
以上幾個(gè)js淫蕩技巧還是蠻實(shí)用的,前提是你沒用使用別人的js框架,用原生創(chuàng)造效率為前提的代碼.
還是那句話js代碼愛好者nothing原創(chuàng),謝謝大家支持,覺得寫得好可以頂下,或者把鏈接發(fā)給朋友
相關(guān)文章
JS+CSS實(shí)現(xiàn)分類動(dòng)態(tài)選擇及移動(dòng)功能效果代碼
這篇文章主要介紹了JS+CSS實(shí)現(xiàn)分類動(dòng)態(tài)選擇及移動(dòng)功能效果代碼,涉及JavaScript實(shí)現(xiàn)頁(yè)面元素動(dòng)態(tài)變換效果實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10
JavaScript實(shí)現(xiàn)的簡(jiǎn)單拖拽效果
這篇文章主要介紹了JavaScript實(shí)現(xiàn)的簡(jiǎn)單拖拽效果,涉及javascript針對(duì)鼠標(biāo)事件與頁(yè)面樣式的操作技巧,需要的朋友可以參考下2015-06-06
uniapp單頁(yè)面實(shí)現(xiàn)頁(yè)面切換的使用示例
本文主要介紹了uniapp單頁(yè)面實(shí)現(xiàn)頁(yè)面切換的使用示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-09-09
JS實(shí)現(xiàn)仿餓了么在瀏覽器標(biāo)簽頁(yè)失去焦點(diǎn)時(shí)網(wǎng)頁(yè)Title改變
這篇文章主要介紹了JS實(shí)現(xiàn)仿餓了么在瀏覽器標(biāo)簽頁(yè)失去焦點(diǎn)時(shí)網(wǎng)頁(yè)Title改變,需要的朋友可以參考下2017-06-06
JavaScript計(jì)算字符串中每個(gè)字符出現(xiàn)次數(shù)的小例子
這篇文章介紹了在JS中計(jì)算字符串中每個(gè)字符出現(xiàn)的次數(shù),有需要的朋友可以參考一下2013-07-07
javascript設(shè)計(jì)模式之中介者模式Mediator
這篇文章主要介紹了javascript設(shè)計(jì)模式之中介者模式Mediator,需要的朋友可以參考下2014-12-12
JS forEach跳出循環(huán)2種實(shí)現(xiàn)方法
這篇文章主要介紹了JS forEach跳出循環(huán)2種實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06

