一、對象:
- 面向過程:凡事都要親力親為,每件事的具體過程都要知道,注重的是過程
- 面向對象:根據需求找對象,所有的事都用對象來做,注重的是結果
- 面向對象特性:封裝,繼承,多态 (抽象性)
- 什麼是對象?
- 看的見,摸得到,具體特指的某個東西
- 找對象
- 描述找對象
- 文字描述找對象
- 小明牽着小黃去逛街
- 一台電視機正在播放影片
- JavaScript的對象是一種無序的集合資料類型,它由若幹鍵值對組成
- js不是面向對象的語言,但是可以模拟面向對象的思想
- js是一門基于對象的語言:
- 萬物皆對象:---------->程式猿 程旭媛
- 建立對象三種方式:
- 調用系統的構造函數建立對象
var 變量名= new Object(); Object 是系統的構造函數 Array
- 自定義構造函數建立對象(結合第一種和需求通過工廠模式建立對象)
自己定義的對象,即java裡的自定義類 ,列如:domain
- 3.字面量的方式建立對象
- ·
相當于一次性對象,修改不靈活
- 調用系統的構造函數建立對象
- 标準對象:
number、string、boolean、function和undefined,object:null、Array、{},Data、RegExp、JSON
二、數組:
就是将多個元素(通常是同一類型)按一定順序排列放到一個集合中,那麼這個集合我們就稱之為數組。
數組是一個有序的清單,可以在數組中存放任意的資料,并且數組的長度可以動态的調整。
數組:存儲一組有序的資料
數組的作用:一次性存儲多個資料
- 數組的定義方式:
- 構造函數定義數組:
var 數組名=new Array();
- 空數組:
var arr1=new Array();
- 長度為5的數組,每個資料的值是undefined:
var arr2=new Array(5);
- 長度為5分數組,
var arr3=new Array(1,2,3,4,5);
- 空數組:
- 字面量方式定義數組:
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;
- 空資料:
- 構造函數定義數組:
- 數組的周遊:
- for(var i=0;i<arr.length;i++){ console.log(arr[i]); }
- for(var key in arr) { console.log(key + “==” + arr[key]);
- 數組常用api方法:
-
: 搜尋Array一個指定的元素的位置indexOf(index)
-
:截取Array的部分元素,然後傳回一個新的Arrayslice(begin,end)
-
: 可以對目前Array進行排序,它會直接修改目前Array的元素位置,直接調用時,按照預設順序排序sort()
-
: 把整個Array的元素反轉reverse()
-
:把目前的Array和另一個Array連接配接起來,并傳回一個新的Arrayarr1.concat(arr2)
-
: 修改Array的“萬能方法”,它可以從指定的索引開始删除若幹元素,然後再從該位置添加若幹元素splice()
-
: 把目前Array的每個元素都用指定的字元串連接配接起來,然後傳回連接配接後的字元串join(str)
-
: push()向Array的末尾添加若幹元素,pop()把Array的最後一個元素删除掉push和pop
-
: unshift()往Array的頭部添加若幹元素,shift()把Array的第一個元素删掉unshift和shift
-
三、Map Set:
-
,ES5中鍵的值隻能是字元串,ES6中引入map鍵的值可以為數字,get和setmap鍵值對
-
:存儲不重複的鍵;add和deleteset
四、iterable類型:Array、Map和Set都屬于iterable類型。
- for … in iterable 循環集合元素的名字
- for … of iterable 循環集合本身的元素:
五、函數:
函數的三種定義方式
- 命名函數:函數如果有名字,就是命名函數
function f1() { console.log("我是一個函數"); }; 調用:f1()
- 匿名函數:函數如果沒有名字,就是匿名函數
function () { console.log("我是一個函數"); }; 調用:不能直接調用
- 函數表達式:
var f4 = function () { console.log("我是一個函數"); }; 調用:f4() 注意:如果console.log(f1);的話 輸出的是函數f1的代碼 ```
函數是一種資料類型,可以作為參數,也可以作為傳回值
- 作用域:使用範圍
-
全局變量:聲明的變量是使用var聲明的,那麼這個變量就是全局變量,全局變量可以在頁面的任何位置使用
除了函數以外,其他的任何位置定義的變量都是全局變量
如果頁面不關閉,那麼就不會釋放,就會占空間,消耗記憶體
- 局部變量:在函數内部定義的變量,是局部變量,外面不能使用
- 全局作用域:全局變量的使用範圍
- 局部作用域:局部變量的使用範圍
- 塊級作用域:
一對大括号就可以看成是一塊,在這塊區域中定義的變量,隻能在這個區域中使用,
但是在js中在這個塊級作用域中用var定義的變量,外面也能使用; 說明js沒有塊級作用域,隻有函數除外。
為了解決塊級作用域,
引入了新的關鍵字let,const
ES6
替代var可以申明一個塊級作用域的變量:let聲明的變量可以改變,值和類型都可以改變,沒有限制。
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無論有沒有錯誤都執行