1. 封裝 DOM 屬性
在 JavaScript 中,我們可以獲取HTML元素的屬性值,例如 element.id 掀抹。但是滔悉,因?yàn)?for 和 class 是 JavaScript 中的關(guān)鍵字伊诵,所以在 JavaScript 中這兩個(gè)屬性名稱分別用 htmlFor 和 className 代替,于是在封裝的時(shí)候需要先對(duì)這兩個(gè)屬性進(jìn)行特殊判斷回官。通常曹宴,我們會(huì)這么寫:
functiongetAttr(el, attrName){
????var attr;
if('for'== attrName) {
????attr='htmlFor';
}else if ('class'== attrName) {
????attr='className';
}else{
????attr= attrName;
}}
但是我在?精通 JavaScript?發(fā)現(xiàn)了一種很妙的寫法, John Resig 是這么寫的:
functiongetAttr(el, attrName){varattr = {'for':'htmlFor','class':'className'}[attrName] || attrName;}
構(gòu)建了一個(gè)對(duì)象來做判斷歉提,實(shí)在是巧妙笛坦!這樣一來節(jié)省了很多代碼,也就減少了BUG出現(xiàn)的可能性苔巨,而且也沒有喪失其可讀性版扩,是很值得學(xué)習(xí)的。
2. 交換兩個(gè)變量的值
這個(gè)問題相信學(xué)過一點(diǎn)編程的人都知道侄泽,一般來說我們會(huì)這么寫:
varfoo =1;
varbar =2;
vartemp = foo;
foo= bar;
bar= temp;
通過一個(gè)臨時(shí)變量來做數(shù)據(jù)的緩沖礁芦,很直觀。但是否可以不使用臨時(shí)變量呢悼尾?看一下下面的這行代碼:
foo = [bar, bar=foo][0];
沒有使用到臨時(shí)變量柿扣,而是利用了數(shù)組。實(shí)在是妙闺魏!
上面這兩行代碼看上去很簡單未状,不像一些諸如高級(jí)算法之類的代碼那么顯眼,但是析桥,如果不是對(duì)語言本身非常了解司草,如果沒有多年的編程經(jīng)驗(yàn)和思考,如果對(duì)數(shù)據(jù)結(jié)構(gòu)不熟悉泡仗,絕對(duì)不可能寫出這樣的代碼埋虹。或許這種對(duì)每一行代碼的深思熟慮沮焕,正是大師和平庸程序員之間的區(qū)別所在。
另外拉宗,這也從側(cè)面說明了:編程的時(shí)候不要忘記思考峦树,否則你就只是一個(gè)完成工作的機(jī)器。所以旦事,如果你現(xiàn)在的工作只是讓你瘋狂做業(yè)務(wù)而不給你思考和學(xué)習(xí)的時(shí)間魁巩,別猶豫,換一個(gè)姐浮。