天天看點

JS基礎學習筆記一、對象:二、數組:三、Map Set:四、iterable類型:Array、Map和Set都屬于iterable類型。五、函數:七、錯誤:

一、對象:

  • 面向過程:凡事都要親力親為,每件事的具體過程都要知道,注重的是過程
  • 面向對象:根據需求找對象,所有的事都用對象來做,注重的是結果
  • 面向對象特性:封裝,繼承,多态 (抽象性)
  • 什麼是對象?
    • 看的見,摸得到,具體特指的某個東西
    • 找對象
    • 描述找對象
    • 文字描述找對象
    • 小明牽着小黃去逛街
    • 一台電視機正在播放影片
  • JavaScript的對象是一種無序的集合資料類型,它由若幹鍵值對組成
    • js不是面向對象的語言,但是可以模拟面向對象的思想
    • js是一門基于對象的語言:
    • 萬物皆對象:---------->程式猿 程旭媛
    • 建立對象三種方式:
      1. 調用系統的構造函數建立對象

        var 變量名= new Object(); Object 是系統的構造函數 Array

      2. 自定義構造函數建立對象(結合第一種和需求通過工廠模式建立對象)

        自己定義的對象,即java裡的自定義類 ,列如:domain

      • 3.字面量的方式建立對象
      • ·

        相當于一次性對象,修改不靈活

  • 标準對象:

    number、string、boolean、function和undefined,object:null、Array、{},Data、RegExp、JSON

二、數組:

就是将多個元素(通常是同一類型)按一定順序排列放到一個集合中,那麼這個集合我們就稱之為數組。

數組是一個有序的清單,可以在數組中存放任意的資料,并且數組的長度可以動态的調整。

數組:存儲一組有序的資料

數組的作用:一次性存儲多個資料

  1. 數組的定義方式:
    1. 構造函數定義數組:

      var 數組名=new Array();

      • 空數組:

        var arr1=new Array();

      • 長度為5的數組,每個資料的值是undefined:

        var arr2=new Array(5);

      • 長度為5分數組,

        var arr3=new Array(1,2,3,4,5);

    2. 字面量方式定義數組:

      var 數組名=[];

      • 空資料:

        var arr4=[];

      • 長度為3的數組,值分别為: 1,2,3:

        var arr5=[1,2,3]

      • 數組中元素的值的類型可以不一樣:

        var arr6=["red","blue","green",1,true];

      • 設定數組的元素的值:

        arr7[0]=10; arr7[1]=20;

  2. 數組的周遊:
    • for(var i=0;i<arr.length;i++){ console.log(arr[i]); }
    • for(var key in arr) { console.log(key + “==” + arr[key]);
  3. 數組常用api方法:
    • indexOf(index)

      : 搜尋Array一個指定的元素的位置
    • slice(begin,end)

      :截取Array的部分元素,然後傳回一個新的Array
    • sort()

      : 可以對目前Array進行排序,它會直接修改目前Array的元素位置,直接調用時,按照預設順序排序
    • reverse()

      : 把整個Array的元素反轉
    • arr1.concat(arr2)

      :把目前的Array和另一個Array連接配接起來,并傳回一個新的Array
    • splice()

      : 修改Array的“萬能方法”,它可以從指定的索引開始删除若幹元素,然後再從該位置添加若幹元素
    • join(str)

      : 把目前Array的每個元素都用指定的字元串連接配接起來,然後傳回連接配接後的字元串
    • push和pop

      : push()向Array的末尾添加若幹元素,pop()把Array的最後一個元素删除掉
    • unshift和shift

      : unshift()往Array的頭部添加若幹元素,shift()把Array的第一個元素删掉

三、Map Set:

  • map鍵值對

    ,ES5中鍵的值隻能是字元串,ES6中引入map鍵的值可以為數字,get和set
  • set

    :存儲不重複的鍵;add和delete

四、iterable類型:Array、Map和Set都屬于iterable類型。

  • for … in iterable 循環集合元素的名字
  • for … of iterable 循環集合本身的元素:

五、函數:

函數的三種定義方式

  1. 命名函數:函數如果有名字,就是命名函數
    function f1() { 
      console.log("我是一個函數");
     };
    調用:f1()
               
  2. 匿名函數:函數如果沒有名字,就是匿名函數
    function () {
        console.log("我是一個函數");
           };
          調用:不能直接調用
               
  3. 函數表達式:
    var f4 = function () { 
         console.log("我是一個函數");
         };
      調用:f4()
      注意:如果console.log(f1);的話 輸出的是函數f1的代碼
        ```
               

函數是一種資料類型,可以作為參數,也可以作為傳回值

  • 作用域:使用範圍
  • 全局變量:聲明的變量是使用var聲明的,那麼這個變量就是全局變量,全局變量可以在頁面的任何位置使用

    除了函數以外,其他的任何位置定義的變量都是全局變量

    如果頁面不關閉,那麼就不會釋放,就會占空間,消耗記憶體

  • 局部變量:在函數内部定義的變量,是局部變量,外面不能使用
  • 全局作用域:全局變量的使用範圍
  • 局部作用域:局部變量的使用範圍
  • 塊級作用域:

一對大括号就可以看成是一塊,在這塊區域中定義的變量,隻能在這個區域中使用,

但是在js中在這個塊級作用域中用var定義的變量,外面也能使用; 說明js沒有塊級作用域,隻有函數除外。

為了解決塊級作用域,

ES6

引入了新的關鍵字let,const

let:

替代var可以申明一個塊級作用域的變量:let聲明的變量可以改變,值和類型都可以改變,沒有限制。

const

替代var來定義一個塊級作用域的常量,const聲明的變量不得改變值,const一旦聲明變量,就必須立即初始化,不能留到以後指派

const定義的數組和對象,變量名不指向資料,而是指向資料所在的位址。

const指令隻是保證變量名指向的位址不變,并不保證該位址的資料不變,通常用全部大寫的變量來表示“這是一個常量,不要修改它的值”:

this的使用:
   普通函數中的this:
      this指目前所處子產品的父親節點,在目前子產品下使用this可以通路目前子產品的兄弟節點
   箭頭函數中的this:
       箭頭函數根本沒有自己的this,導緻内部的this就是外層代碼塊的this,即箭頭函數中的大括号忽略掉,按普通函數規則來處理,看this的指向節點
 隐式全局變量:聲明的變量沒有var,就叫隐式全局變量
 全局變量:使用var 定義是不能被删除的,隐式全局變量是可以被删除的


 預解析(變量提升):就是在解析代碼之前
 預解析做什麼事?
 它會先掃描整個函數體的語句,把所有申明的變量“提升”到函數頂部
 因為JavaScript引擎自動提升了變量的聲明,但不會提升變量的指派
 把變量的聲明提前了----提前到目前所在的作用域的最上面
 函數的聲明也會被提前---提前到目前所在的作用域的最上面	

 常用的高階函數:
 Array的
 map(function):傳入一個函數,把arr裡的單個元素進行函數計算,得到結果作為一個新的arr
 filter(function):和map()類似,不同的是,filter()根據傳回值是true還是false決定保留還是丢棄該元素。
 forEach():和map()類似,它也把每個元素依次作用于傳入的函數,但不會傳回新的數組。forEach()常用于周遊數組,是以,傳入的函數不需要傳回值:
 sort(function):傳入一個函數,對函數定義的方式進行排序,不需要管函數内部怎麼進行,傳回值為1的在前,傳回值為-1的在後,還要有0的情況,
 reduce(function);傳入一個函數,把arr裡的前兩個元素進行函數計算,計算得到的結果作為第一個參數繼續計算,直到最後隻剩兩個的時候結束。
 every(function) :判斷數組的所有元素是否滿足函數的測試條件,必須全部滿足才為true
 findIndex(function)和find(function);用于查找符合條件的“第一個元素”,find傳回元素,findIndex傳回索引

 閉包:當一個函數執行傳回了另外一個函數後,其内部相關的局部變量和參數還被新函數引用,這種稱為“閉包(Closure)
           

#六、标準對象

Data、RegExp、JSON

七、錯誤:

錯誤分兩種:
  一種是程式寫的邏輯和文法不對,導緻代碼執行異常
  一種是執行過程中,程式可能遇到無法預測的異常情況而報錯,例如,網絡連接配接中斷,讀取不存在的檔案,沒有操作權限等。
  第二種需要處理:try ... catch ... finally
                  有錯誤catch會捕獲,并輸出錯誤,finally無論有沒有錯誤都執行