前端筆記—第13篇js基礎2

JavaScript錯誤處理機制

  • javaScript 解析或運行時,一旦發生錯誤,引擎就會拋出一個錯誤對象。JavaScript 原生提供Error構造函數,全部拋出的錯誤都是這個構造函數的實例
  • Error是最普通的錯誤對象,JavaScript在它的基礎上還設置了6種錯誤對象,也就是說存在Error的6個派生對象
  • SyntaxError對象是解析代碼時發生的語法錯誤
  • ReferenceError(引用錯誤)對象是引用一個不存在的變量時發生的錯誤,另外一種觸發場景是,將一個值分配給沒法分配的對象,好比對函數的運行結果或者this賦值
  • RangeError對象是一個值超出有效範圍時發生的錯誤。主要有幾種狀況,一是數組長度爲負數,二是Number對象的方法參數超出範圍,以及函數堆棧超過最大值
  • TypeError對象是變量或參數不是預期類型時發生的錯誤。好比,對字符串、布爾值、數值等原始類型的值使用new命令,就會拋出這種錯誤,由於new命令的參數應該是一個構造函數

object對象

  • JavaScript的全部對象都是繼承之object,即那些對象都是object的實例
  • Object對象的原生方法分爲兩種:Object自身的方法和Object實例方法
  • Object自身的方法:就只直接定義在object上面的方法
  • Object實例方法:所謂實例方法就是定義在object.prototype上面的方法,他能夠被object實例直接使用

數組

  • 數組的靜態方法: Array.isArray(arr);判斷參數是否爲數組,返回值爲布爾值
  • 數組的實例方法:
    • push():表示在數組的末尾添加一個數
    • pop():表示在數組的末尾刪除一個數
    • unshift():表示在數組的開頭添加一個元素
    • shift():表示在數組的開頭位置刪除一個元素
    • join():將指定參數做爲分隔符,將全部數組成員鏈接成一個字符串方法,經過call給方法也能夠用於字符串和相似數組的對象:Array.prototype.join.call('hello','-');
    • concat():用於多個數組的合併,將新數組添加在舊數組的後面
    • reverse():用於顛倒數組元素的排列
    • slice(start,end):用於提取目標數組的一部分,他有一個重要的做用就是將相似數組的對象轉化爲真正的對象,Array.prototype.slice.call(obj);
    • splice(start,count,newEle1,newEle2):用於刪除原數組的一部分,並在刪除元素的位置添加新的元素
    • sort():對數組成員進行排序,注意點:默認是按照字典順序排序的
    • map():將數組成員依次傳入參數函數,而後把每一次的執行結果組成一個新數組方法,也就是說它是有return語句的
    • forEach():將數組的全部成員依次傳入參數函數,作相應的處理,它跟map最大的區別就是map是有返回值的,forEach只是對數據的處理,是沒有返回值的
    • filter():用於過濾數組成員,知足條件的數組成員組成一個新數組方法
    • some():斷言方法,表示數組的成員是否知足一種條件,只要有一個知足就會返回true,不然返回false
    • every():他跟some方法的區別是必須全部的數組成員知足的時候纔會返回true,不然返回false
    • reduce():依次對數組的成員進行累加最後返回一個值,他和reduceRight()的區別是reduce是從左向右,reduceRight()從右向左
    • indexOf():返回給定元素在數組中國第一次出現的位置,若是沒有出現返回-1
    • lastIndexof():返回給定元素在數組中最後一次出現的位置,若是沒有返回-1
    • ES6對數組的擴展方法
    • Array.from():表示將兩類對象轉化爲真正的數組:相似數組的對象和可遍歷的對象(Iterator),還能夠接受第二個參數,做用相似於數組的map方法
    • Array.of():用於將一組值轉化爲數組 Array.of(1,2,3,4,5);[1,2,3,4,5]
    • copyWithIn(target,start,end):將指定位置的成員複製到其餘地方,target表示目標位置,start表示開始位置,end表示結束位置
    • find():用於找出第一個複合條件的數組成員,參數爲一個函數,若是沒有找到返回undefined
    • findIndex():用於找出最後一個複合條件的數組成員,參數也是一個函數
    • fill():使用給定製填充一個數組
    • entries():用於遍歷數組,entries是對鍵值對的遍歷
    • keys():用於遍歷數組,keys是對鍵名的遍歷
    • values():用於遍歷數組,values是對鍵值的遍歷
    • includes():返回一個布爾值,表示一個數組是否包含給定的值,[Nan].includes(Nan); //true,而indexof內部採用的是‘===’,所以[NaN].indexOf(NaN);//false
    • flat():數組的成員有時候仍是數組,經過這個方法能夠將數組轉變爲一個一維數組,注意點默認參數是1,表示只拉平一層
    • flatMap():參數爲一個函數,其用法和flat()差很少
  • 數組的擴展運算符:
    • 數組的擴展運算符至關於rest參數的逆運算,將一個數組轉化爲用逗號分隔的參數序列console.log(...[1,2,3,4,5]);//1,2,3,4,5
    • 若是將數組的擴展運算符放在括號中,JavaScript引擎會認爲是函數調運就會報錯(...[1,2,3,4,5])//會報錯
    • 替代函數的apply方法
    • 合併數組
    • 與結構賦值結合使用,與結構賦值使用只能放在最後一位
    • 字符串的使用
  • call、apply、bind方法
    • call():能夠指定函數內部this的指向,也能夠簡單理解改變函數內部this的指向,call()方法的參數應該是一個對象,若是默認傳入空、null、 undefined 則表示默認傳入全局對象,若是傳入的是this表示綁定當前此環境(對象)
    • apply():它和call惟一的區別是它接受一個數組做爲參數的其餘參數,其他的問題都是和call同樣
    • bind():將函數內部的this綁定到某個對象,而後返回一個新對象
  • 數組的空位:指數組的某一個位置徹底沒有值,空位不是undefined,數組的一個位置爲undefined表示徹底是有值的[,,,]//表示這是數組的空位
  • ES5對空位的處理是跳過忽略,而ES6對空位的處理是用undefined填充,不會忽略空位的

面向對象編程

  • 構造函數
    • 背景:面向對象編程的第一步就是生成對象,典型的面向對象的編程語言如java c++中都有類的概念,可是在JavaScript中不是基於類的而是基於構造函數(constructor)和原型(prototype)
    • 定義:構造函數其實就是一個函數,只不過這個函數是用來生成對象模板的,
    • 特色:函數體內部使用了this關鍵字,表示所生成的對象實例、生成對象的時候必須使用new關鍵字
  • new關鍵字的使用原理
    • 使用new命令,new關鍵字後面的函數一次執行下面的四步操做:
    • 建立一個空對象,做爲將要返回的對象實例
    • 將這個空對象的原型,指向構造函數的的prototype屬性
    • 將這個空對象賦值給函數體內部的this關鍵字
    • 開始執行構造函數內部的代碼
    • 注意點:若是構造函數內部有return語句,並且return後面跟着一個對象,則返回return指定的對象,不然就會忽略return,返回this指定的對象
  • new.target:函數內部可使用new.target命令,若是當前函數是new關鍵字建立的new.target指向當前函數,不然爲undefined。咱們可使用這個命令判斷函數調運的時候是否使用的new關鍵字
  • Object.create():建立實例對象,構造函數做爲模板,能夠生成實例對象。可是,有時拿不到構造函數,只能拿到一個現有的對象。咱們但願以這個現有的對象做爲模板,生成新的實例對象,這時就可使用Object.create()方法。
  • this關鍵字
    • 含義:this關鍵字就是指屬性和方法當前所在的對象
    • this關鍵字的使用場合:
      • 在全局對象中,表示頂層對象window
      • 構造函數中,表示實例對象
      • 對象的方法中,表示該方法運行是所在的對象,注意點:若是this所在的方法不在對象的第一層,這時this只是指向當前一層的對象,而不會繼承更上面的層。
    • this關鍵字使用的注意點:
      • 避免多層嵌套使用this關鍵字
      • 避免數組的map和forEach()方法中使用this關鍵字,可是這個問題在箭頭函數中獲得了很好的解決
      • 避免回調函數中使用this,回調函數中的this每每會改變this的指向
  • 對象的繼承
    • 對象的繼承說白了就是代碼的複用,把幾個對象相同的代碼能夠抽離爲一個公共的父級
    • 構造函數的缺點:同一個構造函數的多個實例之間,沒法共享屬性,從而形成對系統資源的浪費。
    • prototype屬性的做用:原型對象的全部屬性和方法,實例對象是徹底能夠共享的
    • 原型鏈:JavaScript規定,全部對象都有本身的原型,一層一層上溯頂層對象Object.prototype的原型爲null
    • constructor屬性:prototype對象默認是有一個constructor屬性,默認是指向原型對象所在的所在的構造函數,做用:咱們能夠經過這個屬性判斷某個對象的構造函數
    • instanceof運算符:返回一個布爾值,表示對象是否爲某個構造函數的實例
    • instanceof工做原理:instanceof運算符的左邊是對象右邊是構造函數,它會判斷右邊構造函數的原型是否在左邊對象的原型上
function Person(name){
    this.name = name;
}
var obj = new Perosn('lucy');
obj instanceof Perosn// true
複製代碼
  • 構造函數的繼承

json

  • json是一種輕量級的數據交換格式,並且是文本格式
  • json存在的意義就是取代繁瑣笨重的XML
  • 相比xml,json的特色是:書寫簡單,一目瞭然
  • json對值的格式和類型有嚴格的要求:
    • 複合類型的值只能是對象或數組,而不能是函數、正則表達式對象、日期對象
    • 原始類型的值只有四種分別是:字符串、數值、Boolean、null(不能使用NaN、infinity、-infinity、undefined)
    • 字符串必須使用雙引號表示,不能使用單引號表示
    • 對象的鍵名必須放在雙引號裏面
    • 數組或對象的最後一個成員後面不能加逗號
  • 靜態方法
    • json.stringify():用於將一個值轉化爲json字符串,該字符串複合json格式
    • json.parse():用於將json字符串轉化爲對應的值
相關文章
相關標籤/搜索