1. ==
Javascript有兩組相等運算符榔组,一組是==和!=,另一組是===和!==狐援。前者只比較值的相等量愧,后者除了值以外,還比較類型是否相同山析。
請盡量不要使用前一組,永遠只使用===和!==。因為==默認會進行類型轉(zhuǎn)換懂版,規(guī)則十分難記。如果你不相信的話躏率,請回答下面五個判斷式的值是true還是false:
false == 'false'
false == undefined
false == null
null == undefined
0 == ''
前三個是false躯畴,后兩個是true民鼓。
2. with
with的本意是減少鍵盤輸入。比如
obj.a = obj.b;
obj.c = obj.d;
可以簡寫成
with(obj) {
a = b;
c = d;
}
但是蓬抄,在實際運行時丰嘉,解釋器會首先判斷obj.b和obj.d是否存在,如果不存在的話嚷缭,再判斷全局變量b和d是否存在饮亏。這樣就導致了低效率,而且可能會導致意外阅爽,因此最好不要使用with語句路幸。
3. eval
eval用來直接執(zhí)行一個字符串。這條語句也是不應(yīng)該使用的付翁,因為它有性能和安全性的問題简肴,并且使得代碼更難閱讀。
eval能夠做到的事情百侧,不用它也能做到砰识。比如
eval("myValue = myObject." + myKey + ";");
可以直接寫成
myValue = myObject[myKey];
至于ajax操作返回的json字符串,可以使用官方網(wǎng)站提供的解析器json_parse.js運行佣渴。
4. continue
這條命令的作用是返回到循環(huán)的頭部辫狼,但是循環(huán)本來就會返回到頭部。所以通過適當?shù)臉?gòu)造辛润,完全可以避免使用這條命令膨处,使得效率得到改善。
5. switch 貫穿
switch結(jié)構(gòu)中的case語句频蛔,默認是順序執(zhí)行灵迫,除非遇到break,return和throw晦溪。有的程序員喜歡利用這個特點瀑粥,比如
switch(n) {
case 1:
case 2:
break;
}
這樣寫容易出錯,而且難以發(fā)現(xiàn)三圆。因此建議避免switch貫穿狞换,凡是有case的地方,一律加上break舟肉。
switch(n) {
case 1:
break;
case 2:
break;
}
6. 單行的塊結(jié)構(gòu)
if修噪、while、do和for路媚,都是塊結(jié)構(gòu)語句黄琼,但是也可以接受單行命令。比如
if (ok) t = true;
甚至寫成
if (ok)
t = true;
這樣不利于閱讀代碼整慎,而且將來添加語句時非常容易出錯脏款。建議不管是否只有一行命令围苫,都一律加上大括號。
if (ok){
t = true;
}
更多資料免費分享加群????? 120342833????? 驗證回答???? ZZ
7. ++和--
遞增運算符++和遞減運算符--撤师,直接來自C語言剂府,表面上可以讓代碼變得很緊湊,但是實際上會讓代碼看上去更復(fù)雜和更晦澀剃盾。因此為了代碼的整潔性和易讀性腺占,不用為好。
8. 位運算符
Javascript完全套用了Java的位運算符痒谴,包括按位與&衰伯、按位或|、按位異或^闰歪、按位非~嚎研、左移<<、帶符號的右移>>和用0補足的右移>>>库倘。
這套運算符針對的是整數(shù),所以對Javascript完全無用论矾,因為Javascript內(nèi)部教翩,所有數(shù)字都保存為雙精度浮點數(shù)。如果使用它們的話贪壳,Javascript不得不將運算數(shù)先轉(zhuǎn)為整數(shù)饱亿,然后再進行運算,這樣就降低了速度闰靴。而且"按位與運算符"&同"邏輯與運算符"&&彪笼,很容易混淆。
9. function語句
在Javascript中定義一個函數(shù)蚂且,有兩種寫法:
function foo() { }
和
var foo = function () { }
兩種寫法完全等價配猫。但是在解析的時候,前一種寫法會被解析器自動提升到代碼的頭部杏死,因此違背了函數(shù)應(yīng)該先定義后使用的要求泵肄,所以建議定義函數(shù)時,全部采用后一種寫法淑翼。
10. 基本數(shù)據(jù)類型的包裝對象
Javascript的基本數(shù)據(jù)類型包括字符串腐巢、數(shù)字、布爾值玄括,它們都有對應(yīng)的包裝對象String冯丙、Number和Boolean。所以遭京,有人會這樣定義相關(guān)值:
new String("Hello World");
new Number(2000);
new Boolean(false);
這樣寫完全沒有必要胃惜,而且非常費解风宁,因此建議不要使用。
另外蛹疯,new Object和new Array也不建議使用戒财,可以用{}和[]代替。
11. new語句
Javascript是世界上第一個被大量使用的支持Lambda函數(shù)的語言捺弦,本質(zhì)上屬于與Lisp同類的函數(shù)式編程語言饮寞。但是當前世界,90%以上的程序員都是使用面向?qū)ο缶幊塘泻稹榱丝拷髁饔谋溃琂avascript做出了妥協(xié),采納了類的概念寞钥,允許根據(jù)類生成對象慌申。
類是這樣定義的:
var Cat = function (name) {
this.name = name;
this.saying = 'meow' ;
}
然后,再生成一個對象
var myCat = new Cat('mimi');
這種利用函數(shù)生成類理郑、利用new生成對象的語法蹄溉,其實非常奇怪,一點都不符合直覺您炉。而且柒爵,使用的時候,很容易忘記加上new赚爵,就會變成執(zhí)行函數(shù)棉胀,然后莫名其妙多出幾個全局變量。所以冀膝,建議不要這樣創(chuàng)建對象唁奢,而采用一種變通方法。
Douglas Crockford給出了一個函數(shù):
Object.beget = function (o) {
var F = function (o) {};
F.prototype = o ;
return new F;
};
創(chuàng)建對象時就利用這個函數(shù)窝剖,對原型對象進行操作:
var Cat = {
name:'',
saying:'meow'
};
var myCat = Object.beget(Cat);
對象生成后麻掸,可以自行對相關(guān)屬性進行賦值:
myCat.name = 'mimi';
12. void
在大多數(shù)語言中,void都是一種類型枯芬,表示沒有值论笔。但是在Javascript中,void是一個運算符千所,接受一個運算數(shù)狂魔,并返回undefined。
void 0; // undefined
這個命令沒什么用淫痰,而且很令人困惑最楷,建議避免使用。
12種不宜使用的Javascript語法
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來玻熙,“玉大人否彩,你說我怎么就攤上這事∴滤妫” “怎么了列荔?”我有些...
- 文/不壞的土叔 我叫張陵,是天一觀的道長枚尼。 經(jīng)常有香客問我贴浙,道長,這世上最難降的妖魔是什么姑原? 我笑而不...
- 正文 為了忘掉前任悬而,我火速辦了婚禮,結(jié)果婚禮上锭汛,老公的妹妹穿的比我還像新娘。我一直安慰自己袭蝗,他們只是感情好唤殴,可當我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著到腥,像睡著了一般朵逝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上乡范,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了为朋?” 一聲冷哼從身側(cè)響起臂拓,我...
- 正文 年R本政府宣布科雳,位于F島的核電站根蟹,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏糟秘。R本人自食惡果不足惜简逮,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望尿赚。 院中可真熱鬧散庶,春花似錦、人聲如沸凌净。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽冰寻。三九已至须教,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間斩芭,已是汗流浹背轻腺。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 《Javascript語言精粹》這本書的附錄挺實用的,列出了12種應(yīng)該避免使用的Javascript語法尉桩,我們來看...
- 原文: https://github.com/ecomfe/spec/blob/master/javascript...
- FreeCodeCamp - Basic JavaScript 寫在前面: 我曾經(jīng)在進谷前刷過這一套題筒占,不過當時只...
- node.js是一個基于Chrome v8引擎的javascript 運行環(huán)境。Node.js使用了一個事件驅(qū)動这橙、...