搜尋
首頁web前端js教程JavaScript高階程式設計介紹

JavaScript高階程式設計介紹

Jul 18, 2017 pm 05:06 PM
javascriptjs程式設計


前言:

#  大致花了一個星期的時間把這本書認真看了半本,下面是我做的閱讀筆記,希望能讓看這本書的人有個大致的參考。目前可能寫得較亂不夠全面,後續我會整理添加。 (2017-7-17) 

第一章 JavaScript簡介

#第二章 HTML中使用JavaScript

第三章  基本概念

3.1.語法

區分大小寫

#標識符(建議用駝峰大小寫myCar)

註解// /**/

嚴格模式(use strict)

語句 建議var diff-a-b;要用分號,以及 if( test ) {  alert(test);  }一句話也要用{}

3.2 關鍵字和保留字

 

3.3 變數

未初始化undefined    var message = “hi”; message = 100; 型別隨便換

 

Function test(){

Var a = “hi”; 局部

b = “hi”; 全局

}

Test();  alert(a); 錯誤 alert(b); hi

 

3.4 資料類型

typeof

Undefined (定義但未被賦值)

Null(空物件指標)

Boolean(布林值true false 流程控制語句會自動執行對應boolean 轉換)

Number

(八進位0  十進位 十六進位0x  浮點數值數值範圍NaN 數值轉換Number parseInt )

String(字串,單雙引號沒區別,轉義序列,字串特點,toString  String)

Object(對象所有物件的基礎var o = new Object();)

函數在ES是對象,不是一種資料型別。

 

3.5運算子

#一元運算子 ++ -- + -(可用來轉換資料型別)

位元運算子  位元非~num1 位元與& 位元或##| 位元異或^ 左移右移>> 無符號右移>>

 

#布林運算子 &&  ||   乘運算子* / %   加性運算子##+ -   關係運算子 = 

##相等運算子

==   !=   ===  !==   

條件運算子? :   

賦值運算子

=  *=  /=  %=  +=  -=  >=  > >=

 

逗號運算子

 

3.6 

語句

 

# 3.7 

函數 

arguments      

沒有重載## 

#第四章 

 

變數、作用域與記憶體問題

4.1 基本型別與參考型別的值

動態的屬性  (

引用型別能動態地加入屬性

)複製變數值  (

基本型別是不同的空間,參考類型是引用相同的空間

)傳遞參數    (

相同

) #

偵測類型    (typeof  instanceof)

4.2執行環境與作用域

#作用域鏈結 延長作用域鏈結(try-catch  with)  沒有區塊層級作用域(if for 宣告變數查詢識別碼)

 

4.3垃圾收集

策略(標記清除引用計數)  效能問題 管理記憶體 

第五章  #參考類型

5.1 Object類型

 

Var person = {};(適合給函數傳入大量參數)    var parson = new Object();

Person[“name”](使用變數來代表屬性時用)   person.name(推薦)

 

 

#5.2 Array 類型

 

Var colors = new Array();    var colors = Array();  var colors =[*****];

 

Colors[*] = *****;     colors.length

 

偵測陣列:  instanceof   Array.isArray()

 

轉換法:  toString()    valueOf()   toLocaleString()   join()

 

##家字家方法:

##' ##  push()  pop()

 

#佇列方法: shift()  unshift() #重新排序方法: reverse()  sort(

可加入比較函數這個參數

#)  

 

操作方法:

concat()原沒變新增   slice()

原沒變截斷段   

splice()

原變了可刪除可添

 

位置方法: indexOf()  lastIndexOf()  

傳回項目的位置

#迭代方法:every() filter() forEach() map() some()  

每個項目都處理,但原始數組不會改變

並歸方法:

reduce()

順序 

reduceRight()

反序  對兩個項目一直遍歷到最後

 5.3 Date

類型

 New Date() 裡面 parse(“May 25,2004”) UTC(2005,0)       Date.now()

 

#######繼承的方法:###toLocaleString(##toLocaleString(### #########. )  toString()  valueOf()###### #########日期格式化方法:###toDateString() toTimeString() toLocaleDateString() toLocaleTimeString() toUTCString()##### # #########日期###/###時間元件方法:太多具體看書########## #####5.4RegExp###類型### ###### #########字面量### var pattern1 = / [bc]at / i;###### ######### 建構子## # var pattern2 =。 ####沒什麼卵用######### ####

RegExp實例方法:exec() 擷取群組(擷取多組符合項目)   text() 一次看是否符合    

 

RegExp建構子屬性:有點多,用來看最近一次符合的相關訊息

 

模式的限制:缺少某些語言(Perl)所支援的高階正規表示式特性,但是絕大多數情況夠用

 

5.5 Function類型    函數是物件(也是#Function#的實例),函數名稱是指標。

 

function sum(num1,num2) {  }

 

Var sum = function(num1,num2){  };

 

沒有重載:函數是對象,函數名稱是指標。

 

函數宣告與函數表達式:function ******* 函數宣告提升   var sum = ** ***** 不會提升

 

函數內部屬性:arguments物件# (屬性callee指向函數)   this物件( #指向函數執行的環境物件)      屬性caller (指向呼叫目前函數的函數,如果是全域作用域的函數則值為null)

 

函數屬性與方法:

屬性(length宣告參數個數 prototype繼承)  

 

非繼承方法: call( )    apply()   bind()

 

a.apply( b, c);  a.call( b, d );      

'

##Ch

盤'>

##' ##在環境物件

b

裡運行函數

a ,順便給a傳入參數c( argument

或陣列

)  /  d(

每項寫入

出來

)  Var a = b.bind(c);

 

a 是在c

在環境物件裡運行的函數

 

5.6基本包裝類型:Boolean

類型:

################################################################################ var booleanObject = new Boolean(true);  #######建議永遠不要使用######Boolean######物件。 ######### ###### ###### #######Number###類型:######var numberObject = new Number(10);  toFixed( )  toExponential()  toPrecision()######### #########也建議不要直接實例化###Number###類型。 ######### ###### ######String ###類型:######var stringObject = new String(###“hello world”);  length# ##屬性 ######### ###

1.字元方法:charAt()string[]   傳回對應字元    #charCodeAt()   傳回對應字元編碼

 

2.字串操作方法:

 

##concat()

+運算子和陣列的concat()#看起來一樣 

 

Slice()  substring()  substr()  

截斷字串,三個很靈活

 

3.

字串位置方法:indexOf( )   lastIndexOf()

 

4.trim()

方法 刪除前置及後綴的所有空格    trimLeft()  trimRight()

 

5.字串大小寫轉換方法

 

#toLowerCase()  toUpperCase()

經典方法

toLocaleLowerCase()  toLocaleUpperCase()

特定地區  這種更穩健

 

#6.字串的模式比對方法

match()

RegExpexec()本質一樣傳回符合到字串的陣列

 

search()

傳回第一個符合項目的索引否則回傳-1

 

replase()

符合且取代字串

 

#split()

符合分隔符號產生陣列

 

7.localeCompare()   

比較兩個字串

 

8.fromCharCode()   

靜態方法   將多個字元編碼變成字串

 

9.HTML

方法   例如big()     string

#凱希;

5.7

單體內建物件

 

1.Global

物件

 

URL

編碼方法: encodeURI() 整個    

encodeURIComponent()

某一段   編碼 decodeURI() 整個    

某一段   # eval()方法 非常強大且非常危險

ECMAScript

解析器

 #Global 物件的屬性    undefined

Array.........

##都是屬性

 Web瀏覽器是將全域物件作為window

物件的

一部分加以實作的

 

2.Math

物件

 

Math

物件的屬性   一些特殊值例如π

 

min() max()

方法

 

#捨去方法:小數值變整數

   ####### # ##

Math.ceil(25) 進一   Math.floor(25) 退一   #Math.round(25) 四捨五入

 

#random()方法  [0,1) 之間的隨機數字

 

其它方法  太多看書

 

第六章 #物件導向的程式設計

 

#6.1理解物件

 

# 6.1.1屬性類型:

 

#資料屬性:4個特性 

## 

存取器屬性:不包含資料值 4個特性透過Object.defineProperty()##定義 

6.1.2

定義多個屬性:

Object.defineProperties()  可以是資料屬性,也可以是存取器屬性。  

6.1.3

讀取屬性的特性:

Object.getOwnPropertyDescriptor()## 

 

6.2

建立物件

 

6.2.1

工廠模式

(

# #看書

)

 

6.2.2建構子模式(看書 

new  constructor  )

 

#6.2.3原型模式: 

#1.瞭解原型對象

 

2.

原型與

in

運算子( in  for-in )

## 

3.

更簡單的原型語法

(

物件字面量來存取物件

)

 

4.

原型的動態性

(

原型可以換成另一個對象,但對已經建立的實例無效了

)

 

5.原生物件的原型( 就是用原型模式,可以定義新方法在裡面,但不推薦#)6.原型物件的問題:沒有屬於實例自己的屬性 

6.2.4

組合使用建構子模式和原型模式#### ##### ######最常見的模式,實例有自己的屬性和方法,也有共享的。 ###### ######6.2.5###動態原型模式########## ######在上面的模式再加一個判斷語句,來動態在原型中加入方法。 ###### ######6.2.6###寄生建構函數模式########## #########和工廠模式的差異就一個### new###,還有它有多個######return#######。傳回的物件和建構函式沒有關係,導致不能用######instanceof######運算子來決定物件的型別。不太建議使用。 ######### ###

6.2.7穩健建構函數模式

 

#跟寄生建構子模式有類似處,但不用thisnewinstanceof也偵測不出

 

 

6.3繼承

6.3.1

原型鏈  原型搜尋機制

 

1.

別忘了預設的原型:所有函數的默認原型都是

Object

的實例。

 

2.

確定原型與實例的關係:

instanceof    isPrototypeOf()

 3.謹慎地定義方法:必須在實例替換原型之後才能定義新的方法。  4.原型鏈的問題: 原型外的屬性也給了繼承

 

#在創造子類型的實例時,不能傳遞參數給超類型的建構子。

 

很少是單獨使用。  

6.3.2

借用建構子利用

call

apply

來繼承和傳遞參數 但是只能使用建構函數模式。

 也很少單獨使用。

 

6.3.3

組合繼承

原型鏈實作 原型屬性和方法的繼承 

借用建構子實作

對實例屬性的繼承## 

最常用的繼承方式

 

##6.3.4原型式繼承(看書)  

 

沒有用到建構子 保持型別可以用,但是會跟原型模式一樣共用參考型別的屬性。  

6.3.5

寄生式繼承

#(看書#) 

不考慮建構子

可以用上

 

但是無法做到函數重複使用

 

#6.3.6

寄生組合式繼承

(閱讀)## 

組合繼承有問題:呼叫了兩次超類型的建構函數,導致實例和原型中重複了屬性。

 

寄生組合式繼承解決了這個問題,成為了最理想的繼承範式。

  

#第七章

函數表達式

############### ####定義函數方式:###### #########函數宣告###( ###函數宣告提升有#####name)   ############################################################# ### #########函數表達式###( name###為空白匿名函數######/######命名一般函數表達式都是匿名函數# #####)######### ###

7.1遞迴

 

嚴格模式不能用 arguments.callee  可以用命名函數表達式。

 

 

7.2閉包:有權存取另一個函數作用域中的變數的函數

自我總結:閉包是函數,一般用匿名函數

 

#1.閉包可以存取傳回外部函數中的變數。

 

2.另一個函數的活動物件會被保存,直到閉包的作用域連結被銷毀。

 

7.2.1閉包與變數 

 

##副作用:關閉包的作用域鏈上保存的是整個變數對象,所以返回的變數是保存的最後一個值。

 

例如在for迴圈中,則會出現不如意的情況。

 

7.2.2

關於this物件

 

##。

#閉包中的

this

對象,閉包可能在某些特殊情況被放到全局對像上,從而

this

變卻不自知。

 

7.2.3記憶體洩漏

使用閉包,確保正常回收記憶體 

 

7.3

模仿區塊層級作用域

 

用匿名自執行函數來模仿。  

自我總結作用:

 #1.內部執行完就會被摧毀。

 

2.匿名自執行函數可以減少污染全域方法和屬性。  閉包就有一個記憶體的問題,用這個結合很舒適。  

 

7.4私有變數 物件上的都是公有的    

函數裡面的都是私有的

 

透過閉包來建立函數的公有方法

(

特權方法

)    ---------

用來取得私有變數

在建構子中建立                         -------- 建構子

this   

#this.****** = function(){ **** }; 

但是每個實例化都會重新建構一組方法,浪費。

 ###### ######7.4.1###靜態私有變數                  #### 個實例沒有自己的私有屬性######### #########靜態就用###  ###私有作用域###   ###透過閉包在全域的構造函數的原型裡面來創造特權方法。 ######### ###

增進了程式碼的重複使用性,但是每個實例沒有自己的私有變數。 (因為這個叫靜態私有變數)

 

使用實例變數,還是靜態私有變數,看特定需求。

 

 

7.4.2模組模式                   字面量   一個實例物件 

#為單一範例建立私有變數與特權方法

(

單例:只有一個執行個體的物件

) 在匿名函數內部定義私有變數和方法,然後將一個物件字面量作為函數的回傳值。

 

 

7.4.3

增強的模組模式

 必須是某種類型的實例,同時也必須加入某些屬性或方法。

 

以上是JavaScript高階程式設計介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
使用Next.js(後端集成)構建多租戶SaaS應用程序使用Next.js(後端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:23 AM

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

如何使用Next.js(前端集成)構建多租戶SaaS應用程序如何使用Next.js(前端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:22 AM

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript:探索網絡語言的多功能性JavaScript:探索網絡語言的多功能性Apr 11, 2025 am 12:01 AM

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的演變:當前的趨勢和未來前景JavaScript的演變:當前的趨勢和未來前景Apr 10, 2025 am 09:33 AM

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

神秘的JavaScript:它的作用以及為什麼重要神秘的JavaScript:它的作用以及為什麼重要Apr 09, 2025 am 12:07 AM

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python還是JavaScript更好?Python還是JavaScript更好?Apr 06, 2025 am 12:14 AM

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

如何安裝JavaScript?如何安裝JavaScript?Apr 05, 2025 am 12:16 AM

JavaScript不需要安裝,因為它已內置於現代瀏覽器中。你只需文本編輯器和瀏覽器即可開始使用。 1)在瀏覽器環境中,通過標籤嵌入HTML文件中運行。 2)在Node.js環境中,下載並安裝Node.js後,通過命令行運行JavaScript文件。

在Quartz中如何在任務開始前發送通知?在Quartz中如何在任務開始前發送通知?Apr 04, 2025 pm 09:24 PM

如何在Quartz中提前發送任務通知在使用Quartz定時器進行任務調度時,任務的執行時間是由cron表達式設定的。現�...

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能