12種不適宜使用的javascript語法

来源:http://www.cnblogs.com/beyond-succeed/archive/2016/08/26/5811525.html
-Advertisement-
Play Games

1. == (o゜▽゜)o☆[BINGO!] Javascript有兩組相等運算符,一組是==和!=,另一組是 和!==。前者只比較值的相等,後者除了值以外,還比較類型是否相同。 請儘量不要使用前一組,永遠只使用 和!==。因為==預設會進行類型轉換,規則十分難記。如果你不相信的話,請回答下麵五個判 ...


1. == (o゜▽゜)o☆[BINGO!]


Javascript有兩組相等運算符,一組是==和!=,另一組是===和!==。前者只比較值的相等,後者除了值以外,還比較類型是否相同。

請儘量不要使用前一組,永遠只使用===和!==。因為==預設會進行類型轉換,規則十分難記。如果你不相信的話,請回答下麵五個判斷式的值是true還是false:

false == 'false'
false == undefined
false == null
null == undefined
0 == ''

 

前三個是false,後兩個是true。

2. with (o゜▽゜)o☆[BINGO!]


with的本意是減少鍵盤輸入。比如

obj.a = obj.b;

obj.c = obj.d;

 

可以簡寫成

with(obj) {
  a = b;
  c = d;
}

 

但是,在實際運行時,解釋器會首先判斷obj.b和obj.d是否存在,如果不存在的話,再判斷全局變數b和d是否存在。這樣就導致了低效率,而且可能會導致意外,因此最好不要使用with語句。

3. eval (o゜▽゜)o☆[BINGO!]


eval用來直接執行一個字元串。這條語句也是不應該使用的,因為它有性能和安全性的問題,並且使得代碼更難閱讀。

eval能夠做到的事情,不用它也能做到。比如

eval("myValue = myObject." + myKey + ";");

 

可以直接寫成

myValue = myObject[myKey];

 

至於ajax操作返回的json字元串,可以使用官方網站提供的解析器json_parse.js運行。

4. continue (o゜▽゜)o☆[BINGO!]


這條命令的作用是返回到迴圈的頭部,但是迴圈本來就會返回到頭部。所以通過適當的構造,完全可以避免使用這條命令,使得效率得到改善。

5. switch 貫穿 (o゜▽゜)o☆[BINGO!]


switch結構中的case語句,預設是順序執行,除非遇到break,return和throw。有的程式員喜歡利用這個特點,比如

switch(n) {
  case 1:
  case 2:
  break;
}

 

這樣寫容易出錯,而且難以發現。因此建議避免switch貫穿,凡是有case的地方,一律加上break。

switch(n) {
  case 1:
    break;
  case 2:
    break;
}

 

6. 單行的塊結構 (o゜▽゜)o☆[BINGO!]

if、while、do和for,都是塊結構語句,但是也可以接受單行命令。比如

if (ok) t = true;

 

甚至寫成

if (ok)
    t = true;

 

這樣不利於閱讀代碼,而且將來添加語句時非常容易出錯。建議不管是否只有一行命令,都一律加上大括弧。

if (ok){
    t = true;
  }

 

7. ++和-- (o゜▽゜)o☆[BINGO!]


遞增運算符++和遞減運算符--,直接來自C語言,錶面上可以讓代碼變得很緊湊,但是實際上會讓代碼看上去更複雜和更晦澀。因此為了代碼的整潔性和易讀性,不用為好。

8. 位運算符 (o゜▽゜)o☆[BINGO!]


Javascript完全套用了Java的位運算符,包括按位與&、按位或|、按位異或^、按位非~、左移<<、帶符號的右移>>和用0補足的右移>>>。

這套運算符針對的是整數,所以對Javascript完全無用,因為Javascript內部,所有數字都保存為雙精度浮點數。如果使用它們的話,Javascript不得不將運算數先轉為整數,然後再進行運算,這樣就降低了速度。而且"按位與運算符"&同"邏輯與運算符"&&,很容易混淆。

9. function語句 (o゜▽゜)o☆[BINGO!]


在Javascript中定義一個函數,有兩種寫法:

function foo() { }

var foo = function () { }

 

兩種寫法完全等價。但是在解析的時候,前一種寫法會被解析器自動提升到代碼的頭部,因此違背了函數應該先定義後使用的要求,所以建議定義函數時,全部採用後一種寫法。

10. 基本數據類型的包裝對象 (o゜▽゜)o☆[BINGO!]


Javascript的基本數據類型包括字元串、數字、布爾值,它們都有對應的包裝對象String、Number和Boolean。所以,有人會這樣定義相關值:

new String("Hello World");

new Number(2000);

new Boolean(false);

 

這樣寫完全沒有必要,而且非常費解,因此建議不要使用。

另外,new Object和new Array也不建議使用,可以用{}和[]代替。

11. new語句 (o゜▽゜)o☆[BINGO!]


Javascript是世界上第一個被大量使用的支持Lambda函數的語言,本質上屬於與Lisp同類的函數式編程語言。但是當前世界,90%以上的程式員都是使用面向對象編程。為了靠近主流,Javascript做出了妥協,採納了類的概念,允許根據類生成對象。

類是這樣定義的:

var Cat = function (name) {
    this.name = name;
    this.saying = 'meow' ;
  }

然後,再生成一個對象

var myCat = new Cat('mimi');

這種利用函數生成類、利用new生成對象的語法,其實非常奇怪,一點都不符合直覺。而且,使用的時候,很容易忘記加上new,就會變成執行函數,然後莫名其妙多出幾個全局變數。所以,建議不要這樣創建對象,而採用一種變通方法。

Douglas Crockford給出了一個函數:

Object.beget = function (o) {
    var F = function (o) {};
    F.prototype = o ;
    return new F;
  };

創建對象時就利用這個函數,對原型對象進行操作:

var Cat = {
    name:'',
    saying:'meow'
  };

  var myCat = Object.beget(Cat);

對象生成後,可以自行對相關屬性進行賦值:

 myCat.name = 'mimi';

 

12. void (o゜▽゜)o☆[BINGO!]


在大多數語言中,void都是一種類型,表示沒有值。但是在Javascript中,void是一個運算符,接受一個運算數,並返回undefined。

void 0; // undefined

這個命令沒什麼用,而且很令人困惑,建議避免使用。

 

不是說不能用而是要少用  (o゜▽゜)o☆[BINGO!]


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 現象: 近期在微信中開發了一個電商的平臺,一切介面頁面處理完成後,正式佈置到公眾號,在公眾號上自定義菜單進行平臺時(如:.../index.html),發現了一個很有意思的問題:哪個頁面是從公眾號里點擊進入的平臺的,當切換一兩次頁面時,.../index.html這個頁面就切換不進了。 解決過程: ...
  • 享元模式 在JavaScript中,瀏覽器特別是移動端的瀏覽器分配的記憶體很有限,如何節省記憶體就成了一件非常有意義的事情。節省記憶體的一個有效方法是減少對象的數量。 享元模式(Flyweight),運行共用技術有效地支持大量細粒度的對象,避免大量擁有相同內容的小類的開銷(如耗費記憶體),使大家共用一個類( ...
  • 什麼是Ajax Ajax 是一種在無需重新載入整個網頁的情況下,能夠更新部分網頁的技術。 Ajax的全稱是Asynchronous JavaScript and XML,即非同步JavaScript+XML。它並不是新的編程語言,而是幾種原有技術的結合體。它由以下幾種技術組合而成,包括: HTML/X ...
  • 前言:找了上課時數據結構的教程來看,但是用的語言是c++,所以具體實現在網上搜大神的博客來看,我看到的大神們的博客都寫得特別好,不止講了最基本的思想和演算法實現,更多的是側重於實例運用,一邊看一邊在心裡隱隱歌頌大神的厲害,然後別人的厲害不是我的,所以到底看得各種受打擊+頭昏腦漲,寫這個系列是希望自己能 ...
  • 1.什麼是Code Mirror 最近做一個項目需要在網頁上實現一個代碼編輯器,支持語法高亮、自動縮進、智能提示等功能。發現Code Mirror剛好滿足所有需求。Code Mirror是由js寫的一款插件,其功能非常強大,用來實現網頁端代碼編輯器非常方便。如果想看效果圖,可移步到這裡 CodeOn ...
  • Definition 瀑布流佈局,在視覺上表現為參差不齊的多欄佈局,隨著頁面滾動條向下滾動,新數據不斷被載入進來。 瀑布流對於圖片的展現,是高效而具有吸引力的,用戶一眼掃過的快速閱讀模式可以在短時間內獲得更多的信息量,而瀑布流里懶載入模式又避免了用戶滑鼠點擊的翻頁操作。 瀑布流的主要特性便是錯落有致 ...
  • 一、 Date對象 定義:Date()可以返回系統當天的日期和時間; 註意:返回的是標註的時間格式 Sun Aug 07 22:50:03 2016 用法: 1.1 獲取時間對象 1.2 轉換成時間對象 1.3 Date.parse把日期格式的字元串轉換成毫秒形式,如果日期格式不正確,返回NaN 1 ...
  • github地址:https://github.com/lily1010/sass/tree/master/course02 用到的sass語法是: sass --watch test.scss:test.css --style compact --style expanded 如下圖: 1 類名嵌 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...