1. 程式人生 > >Javascript基礎(二)

Javascript基礎(二)

三. JavaScript的資料型別

基本資料型別

  • number
  • string
  • Boolean
  • undefined
  • null

引用資料型別

四. JavaScript陣列方法,JavaScript字串方法 陣列方法

  • arr.push(),向後新增,並返回修改後陣列的長度
  • arr.unshift(),向後刪除,並返回修改後陣列的長度
  • arr.pop(),向前新增,,然後返回移除的項
  • arr.shift(),向前刪除,,然後返回移除的項
  • arr.splice(a,b,c),刪替插
    • 刪除:a,刪除第一項序號,b,刪除數量
    • 替換:a,替換起點項,b,數量,c,替換資料
    • 插入:a,起點項,b,0,表示不刪除,c,新增的資料
  • arr.sort(),排序,按unicode編碼排序

        arr.sortfunctiona,b){
            return a-b(b-a);//正序(倒序)
        }
  • arr.join(),連線字串為陣列
  • arr.concat(),將引數新增進陣列中
  • arr.reverse(),將陣列反序
  • forEach():對陣列進行遍歷迴圈,沒有返回值

字串方法

  • str.length,輸出字串長度
  • str.indexOf(searchstring,startIndex),從startIndexz位置開始找searchstring第一次出現的位置,若未找到,返回-1
  • str.lastIndexOf(searchstring,startIndex),從後向前找,返回字元第一次出現的位置下標,未找到,返回-1
  • str.charAt(index),返回子字串,index為陣列下標,範圍(0,str.length-1)
  • str.charCodeAt(),返回字串的unicode編碼
  • string.fromCharCode(num,num1),根據編碼返回字串
  • str.substring(start,end),兩個引數,擷取字串,傳入負值會從0開始
  • str.slice(),一個引數時,不會自動檢測,負數時自動從後向前找
  • str.split(“.”),以.分割字串輸出陣列,不傳參也會分割
  • str.toUppCase(),將字串轉化為大寫
  • str.toLowerCase(),將字串轉化為小寫
  • str.replace(regexp|substr, newSubStr|function),搜素與子字串相匹配內容,並用新字串替換
  • str.search(regexp),找 str 與一個正則表示式是否匹配。如果匹配成功,則返回正則表示式在字串中首次匹配項的索引;否則,返回 -1。

五. ajax的四個過程,要手撕程式碼

HTTP請求方法

  • GET在url裡傳送,安全性低,有快取,會被保留在歷史記錄中便於分享,在報文主體沒有任何意義,在瀏覽器回退時是無害的,只可以進行url編碼,對傳遞的引數有長度限制,只接受ASCII字元
  • POST在request body裡傳送,安全性一般,更適合於上傳,根據報文(指的是一串資料)主體對指定資源做出處理,在瀏覽器回退時會再次請求,可以支援多種方式,對引數沒有限制

AJAX過程

能夠區域性重新整理網頁資料而不重新載入

  • 建立ajax物件(用來和伺服器交換物件)

    var xhr = new XHTMLHttpRequest(); //IE7以後版本

  • 連線伺服器

    open(方法,檔名,非同步傳輸)

    • 方法:get/post
    • 檔名:自定義的檔名
    • 同步(事件一件一件進行)/非同步(多種事件一起進行):false/true
  • 傳送請求

    • send(),引數為作為請求主體傳送的資料,不需傳送時,必須傳入null,null對有些瀏覽器來說是必須的
  • 接受返回值

    • onreadystatechange; 當伺服器發生資料傳輸時的請求狀態
    • 屬性:readState
      • 0 (未初始化) 還未呼叫open方法
      • 1 (載入) 已呼叫open方法,正在傳送請求
      • 2 (載入完成) send()方法以完成,已收到全部內容
      • 3 (解析) 正在解析相應內容
      • 4 (完成) 可在客戶端呼叫
    • 響應自動填充xhr物件:
      • responseText屬性:作為響應主體被返回的文字
      • responseXML屬性:若響應內容型別是text/xmlapplication/xml,包含響應資料的XML DOM 文件,不是時為儲存為null
      • status屬性:響應的HTTP狀態,判斷請求是否成功,200成功,常見404失敗
      • statusText:HTTP狀態說明
    • 收到響應前可使用abort()方法來取消非同步請求,xhr物件會停止觸發事件,並不在允許訪問任何響應屬性值,在終止請求後,會對物件進行解引用,由於記憶體原因,不建議重用xhr物件

HTTP狀態碼

  • 1xx(臨時響應):表示臨時響應,並需要請求者繼續執行操作

    • 100(繼續):請求者應當繼續提出請求。伺服器表示已收到請求的第一部分,正在等待其餘部分
    • 101(切換協議):請求者要求伺服器切換協議,伺服器已確認並準備更換
  • 2xx(成功):表示成功處理了請求

    • 200(成功):伺服器已成功處理了請求,提供了請求的網頁
    • 201(已建立):請求成功並且伺服器建立了新的資源
    • 202(已接受):伺服器已接受請求,但未處理
    • 203(非授權資訊):已成功處理請求,但返回的資訊可能來自另一來源
    • 204(無內容):成功處理了請求,但沒有返回任何內容
    • 205(重置內容):成功處理了請求,並重置內容
    • 206(部分內容):成功處理了部分請求
  • 3xx(重定向):表示完成請求,需要進一步操作

    • 300(多種選擇):伺服器針對請求,可執行多種操作
    • 301(永久移動):請求的網路已永久移動到新位置返回響應時,會自動將轉到新位置
    • 302(臨時移動):伺服器從不同的位置進行網頁請求,但請求者會使用原有位置來進行以後的請求
    • 303(檢視其他位置):請求者應對不同的位置,使用單獨的GET請求檢索響應時,伺服器返回此地程式碼
    • 304(未修改):自從上次請求後,請求的網頁未修改過
    • 305(使用代理):請求者只能使用代理訪問請求的網頁
    • 307(臨時重定向):伺服器目前從不同位置的網頁響應請求,但請求者會繼續使用原有位置來進行以後請求
  • 4xx(請求錯誤):表示請求錯誤,妨礙了伺服器的處理

    • 400(錯誤請求):伺服器不理解請求的語法
    • 401(未授權):請求要求身份驗證
    • 403(禁止):伺服器拒絕請求
    • 404(未找到):找不到請求網頁
    • 405(方法禁用):禁止請求中指定的方法
    • 406(不接受):無法使用請求的內容特性響應請求的網頁
    • 407(需要代理授權):指定請求者應當授權使用代理
    • 408(請求超時):等候請求時發生超時
    • 409(衝突):在完成請求時發生衝突,伺服器必須在響應中包含有關衝突資訊
    • 410(已刪除):請求的資源已永久刪除
    • 411(需要有效長度):伺服器不接受不含有效內容長度標頭欄位的請求
    • 412(未滿足前提條件):未滿足請求者在請求中設定的其中一個前提條件
    • 413(請求實體過大):伺服器無法處理請求,超出了處理範圍
    • 414(請求的URL過長):網址過長
    • 415(不支援的媒體型別)請求的格式不受請求頁面支援:
    • 416(請求範圍不符合要求):頁面無法提供請求的範圍
    • 417(未滿足期望值):未滿足“期望”請求標字頭段的要求
  • 5xx(伺服器錯誤)

    • 500(伺服器內部錯誤):伺服器遇到錯誤,無法完成請求
    • 501(尚未實施):不具備完成請求的功能
    • 502(錯誤閘道器):伺服器作為閘道器或代理,從上游伺服器收到無效請求
    • 503(伺服器不可用):目前無法使用(維修或故障),只是暫時的
    • 504(閘道器超時):伺服器作為閘道器或代理,但沒有及時從上游伺服器收到請求
    • 505(HTTP版本不受支援):不支援HTTP協議版本

六. JSON是什麼,JSON物件和JSON字串如何轉換

JSON是Javascript一個嚴格的子集,是一種輕量級的資料格式,可以簡化複雜資料結構,利用了javascript的一些模式來表示資料化結構,不支援變數、函式、物件例項,有三種類型的值:

簡單值

與JS相同,不過字串必須使用雙引號,且不支援undefined

物件: JSON物件字面量,與JS表示不同,沒有變數,屬性名必須加雙引號

{
    "name": "chenlinong",
    "age":29,
    "school":{
        "name": "xxx",
        "location": "xxx"
    }
};      

陣列: JSON陣列,與JS表示不同,沒有變數和分號

[
    {
        name": "chenlinong",
        "age":29,
        "school":[
             "xxx"
        ]
    },
    {
        name": "chenlinong",
        "age":29,
        "school":[
             "xxx"
        ]
    }

]

早期JSON解析器用JS的eval()函式,可以解析、解釋並返回JS物件和陣列,ES5對JSON規範,並定義了全域性物件,eval()對JSON資料結構求值存在風險

JSON物件有兩個方法:

  • stringify(變數名,過濾器,選項),把JS物件序列化為JSON字串,不包含空格字元和縮排
    • 過濾器:可以是陣列,也可以是引數。
    • 字串縮排,若是數值,代表每個級別縮排的空格數,第二個引數可設為null,最大縮排空格數為10;也可使用字串,可設定為製表符
    • toJSON()方法,解決JSON.stringify()不能滿足有些JS物件自定義序列化需求時,給JS物件新增方法,返回自身JSON資料格式
  • parse(變數名,還原函式),把JSON字串解析為JS值,還原函式在每個鍵值對上呼叫