12種不宜使用的Javascript語法---《Javascript語言精粹》

《Javascript語言精粹》這本書的附錄挺實(shí)用的,列出了12種應(yīng)該避免使用的Javascript語法,我們來看一下壹堰。

==

Javascript有兩組相等運(yùn)算符离福,一組是==和!=,另一組是===和!==披蕉。前者只比較值的相等,后者除了值以外乌奇,還比較類型是否相同没讲。
         
請盡量不要使用前一組,永遠(yuǎn)只使用===和!==礁苗。因?yàn)?=默認(rèn)會進(jìn)行類型轉(zhuǎn)換爬凑,規(guī)則十分難記。如果你不相信的話试伙,請回答下面五個判斷式的值是true還是false:
  false == 'false'
  false == undefined
  false == null
  null == undefined
  0 == ''
前三個是false嘁信,后兩個是true。

with

with的本意是減少鍵盤輸入疏叨。比如
  obj.a = obj.b;
  obj.c = obj.d;
可以簡寫成
  with(obj) {
    a = b;
    c = d;
  }
但是潘靖,在實(shí)際運(yùn)行時,解釋器會首先判斷obj.b和obj.d是否存在蚤蔓,如果不存在的話卦溢,再判斷全局變量b和d是否存在。這樣就導(dǎo)致了低效率,而且可能會導(dǎo)致意外单寂,因此最好不要使用with語句贬芥。

eval

eval用來直接執(zhí)行一個字符串。這條語句也是不應(yīng)該使用的宣决,因?yàn)樗行阅芎桶踩缘膯栴}誓军,并且使得代碼更難閱讀。
eval能夠做到的事情疲扎,不用它也能做到昵时。比如
  eval("myValue = myObject." + myKey + ";");
可以直接寫成
  myValue = myObject[myKey];
至于ajax操作返回的json字符串,可以使用官方網(wǎng)站提供的解析器json_parse.js運(yùn)行椒丧。

continue

這條命令的作用是返回到循環(huán)的頭部壹甥,但是循環(huán)本來就會返回到頭部。所以通過適當(dāng)?shù)臉?gòu)造壶熏,完全可以避免使用這條命令句柠,使得效率得到改善

switch 貫穿

switch結(jié)構(gòu)中的case語句,默認(rèn)是順序執(zhí)行棒假,除非遇到break溯职,return和throw。有的程序員喜歡利用這個特點(diǎn)帽哑,比如
  switch(n) {
    case 1:
    case 2:
      break;
  }
這樣寫容易出錯谜酒,而且難以發(fā)現(xiàn)。因此建議避免switch貫穿妻枕,凡是有case的地方僻族,一律加上break。
  switch(n) {
    case 1:
      break;
    case 2:
      break;
  }

單行的塊結(jié)構(gòu)

if屡谐、while述么、do和for,都是塊結(jié)構(gòu)語句愕掏,但是也可以接受單行命令度秘。比如
  if (ok) t = true;
甚至寫成
  if (ok)
    t = true;
這樣不利于閱讀代碼,而且將來添加語句時非常容易出錯饵撑。建議不管是否只有一行命令剑梳,都一律加上大括號。
  if (ok){
    t = true;
  }

++和--

遞增運(yùn)算符++和遞減運(yùn)算符--肄梨,直接來自C語言阻荒,表面上可以讓代碼變得很緊湊挠锥,但是實(shí)際上會讓代碼看上去更復(fù)雜和更晦澀众羡。因此為了代碼的整潔性和易讀性,不用為好蓖租。

位運(yùn)算符

Javascript完全套用了Java的位運(yùn)算符粱侣,包括按位與&羊壹、按位或|、按位異或^齐婴、按位非~油猫、左移<<、帶符號的右移>>和用0補(bǔ)足的右移>>>柠偶。
這套運(yùn)算符針對的是整數(shù)情妖,所以對Javascript完全無用,因?yàn)镴avascript內(nèi)部诱担,所有數(shù)字都保存為雙精度浮點(diǎn)數(shù)毡证。如果使用它們的話,Javascript不得不將運(yùn)算數(shù)先轉(zhuǎn)為整數(shù)蔫仙,然后再進(jìn)行運(yùn)算料睛,這樣就降低了速度。而且"按位與運(yùn)算符"&同"邏輯與運(yùn)算符"&&摇邦,很容易混淆恤煞。

function語句

在Javascript中定義一個函數(shù),有兩種寫法:
  function foo() { }
和
  var foo = function () { }
兩種寫法完全等價施籍。但是在解析的時候居扒,前一種寫法會被解析器自動提升到代碼的頭部,因此違背了函數(shù)應(yīng)該先定義后使用的要求丑慎,所以建議定義函數(shù)時苔货,全部采用后一種寫法。

基本數(shù)據(jù)類型的包裝對象

Javascript的基本數(shù)據(jù)類型包括字符串立哑、數(shù)字夜惭、布爾值,它們都有對應(yīng)的包裝對象String铛绰、Number和Boolean诈茧。所以,有人會這樣定義相關(guān)值:
  new String("Hello World");
  new Number(2000);
  new Boolean(false);
這樣寫完全沒有必要捂掰,而且非常費(fèi)解敢会,因此建議不要使用。
另外这嚣,new Object和new Array也不建議使用鸥昏,可以用{}和[]代替。

new語句

Javascript是世界上第一個被大量使用的支持Lambda函數(shù)的語言姐帚,本質(zhì)上屬于與Lisp同類的函數(shù)式編程語言吏垮。但是當(dāng)前世界,90%以上的程序員都是使用面向?qū)ο缶幊獭榱丝拷髁魃磐簦琂avascript做出了妥協(xié)唯蝶,采納了類的概念,允許根據(jù)類生成對象遗嗽。
類是這樣定義的:
  var Cat = function (name) {
    this.name = name;
    this.saying = 'meow' ;
  }
然后粘我,再生成一個對象
  var myCat = new Cat('mimi');
這種利用函數(shù)生成類、利用new生成對象的語法痹换,其實(shí)非常奇怪征字,一點(diǎn)都不符合直覺。而且娇豫,使用的時候柔纵,很容易忘記加上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ù),對原型對象進(jìn)行操作:
  var Cat = {
    name:'',
    saying:'meow'
  };
  var myCat = Object.beget(Cat);
對象生成后椒振,可以自行對相關(guān)屬性進(jìn)行賦值:
  myCat.name = 'mimi';

void

在大多數(shù)語言中昭伸,void都是一種類型,表示沒有值澎迎。但是在Javascript中庐杨,void是一個運(yùn)算符,接受一個運(yùn)算數(shù)夹供,并返回undefined灵份。
  void 0; // undefined
這個命令沒什么用,而且很令人困惑哮洽,建議避免使用填渠。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鸟辅,隨后出現(xiàn)的幾起案子氛什,更是在濱河造成了極大的恐慌,老刑警劉巖匪凉,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件枪眉,死亡現(xiàn)場離奇詭異,居然都是意外死亡再层,警方通過查閱死者的電腦和手機(jī)贸铜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門堡纬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人萨脑,你說我怎么就攤上這事隐轩〗确梗” “怎么了渤早?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長瘫俊。 經(jīng)常有香客問我鹊杖,道長,這世上最難降的妖魔是什么扛芽? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任骂蓖,我火速辦了婚禮,結(jié)果婚禮上川尖,老公的妹妹穿的比我還像新娘登下。我一直安慰自己,他們只是感情好叮喳,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布被芳。 她就那樣靜靜地躺著,像睡著了一般馍悟。 火紅的嫁衣襯著肌膚如雪畔濒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天锣咒,我揣著相機(jī)與錄音侵状,去河邊找鬼。 笑死毅整,一個胖子當(dāng)著我的面吹牛趣兄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播悼嫉,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼诽俯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了承粤?” 一聲冷哼從身側(cè)響起暴区,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎辛臊,沒想到半個月后仙粱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡彻舰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年伐割,在試婚紗的時候發(fā)現(xiàn)自己被綠了候味。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡隔心,死狀恐怖白群,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情硬霍,我是刑警寧澤帜慢,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站唯卖,受9級特大地震影響粱玲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拜轨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一抽减、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧橄碾,春花似錦卵沉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至皆串,卻和暖如春淹办,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背恶复。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工怜森, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人谤牡。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓副硅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親翅萤。 傳聞我的和親對象是個殘疾皇子恐疲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353

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