12種不宜使用的Javascript語法

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

這個命令沒什么用淫痰,而且很令人困惑最楷,建議避免使用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市籽孙,隨后出現(xiàn)的幾起案子烈评,更是在濱河造成了極大的恐慌,老刑警劉巖犯建,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讲冠,死亡現(xiàn)場離奇詭異,居然都是意外死亡适瓦,警方通過查閱死者的電腦和手機竿开,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來玻熙,“玉大人否彩,你說我怎么就攤上這事∴滤妫” “怎么了列荔?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長枚尼。 經(jīng)常有香客問我贴浙,道長,這世上最難降的妖魔是什么姑原? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任悬而,我火速辦了婚禮,結(jié)果婚禮上锭汛,老公的妹妹穿的比我還像新娘。我一直安慰自己袭蝗,他們只是感情好唤殴,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著到腥,像睡著了一般朵逝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上乡范,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天配名,我揣著相機與錄音,去河邊找鬼晋辆。 笑死渠脉,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的瓶佳。 我是一名探鬼主播芋膘,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了为朋?” 一聲冷哼從身側(cè)響起臂拓,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎习寸,沒想到半個月后胶惰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡霞溪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年孵滞,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片威鹿。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡剃斧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出忽你,到底是詐尸還是另有隱情幼东,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布科雳,位于F島的核電站根蟹,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏糟秘。R本人自食惡果不足惜简逮,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望尿赚。 院中可真熱鬧散庶,春花似錦、人聲如沸凌净。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽冰寻。三九已至须教,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間斩芭,已是汗流浹背轻腺。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留划乖,地道東北人贬养。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像迁筛,于是被迫代替她去往敵國和親煤蚌。 傳聞我的和親對象是個殘疾皇子耕挨,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容