目錄
第一章 JavaScript簡介" >第一章 JavaScript簡介
#第二章 HTML中使用JavaScript" >#第二章 HTML中使用JavaScript
第三章  基本概念" >第三章  基本概念
4.1 基本型別與參考型別的值" >4.1 基本型別與參考型別的值
第五章  #參考類型" >第五章  #參考類型
第六章 #物件導向的程式設計" >第六章 #物件導向的程式設計
(閱讀)## " >(閱讀)## 
首頁 web前端 js教程 JavaScript高階程式設計介紹

JavaScript高階程式設計介紹

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


前言:

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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1325
25
PHP教程
1273
29
C# 教程
1252
24
建議:優秀JS開源人臉偵測辨識項目 建議:優秀JS開源人臉偵測辨識項目 Apr 03, 2024 am 11:55 AM

人臉偵測辨識技術已經是一個比較成熟且應用廣泛的技術。而目前最廣泛的網路應用語言非JS莫屬,在Web前端實現人臉偵測辨識相比後端的人臉辨識有優勢也有弱勢。優點包括減少網路互動、即時識別,大大縮短了使用者等待時間,提高了使用者體驗;弱勢是:受到模型大小限制,其中準確率也有限。如何在web端使用js實現人臉偵測呢?為了實現Web端人臉識別,需要熟悉相關的程式語言和技術,如JavaScript、HTML、CSS、WebRTC等。同時也需要掌握相關的電腦視覺和人工智慧技術。值得注意的是,由於Web端的計

如何使用WebSocket和JavaScript實現線上語音辨識系統 如何使用WebSocket和JavaScript實現線上語音辨識系統 Dec 17, 2023 pm 02:54 PM

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術 WebSocket與JavaScript:實現即時監控系統的關鍵技術 Dec 17, 2023 pm 05:30 PM

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

股票分析必備工具:學習PHP和JS繪製蠟燭圖的步驟 股票分析必備工具:學習PHP和JS繪製蠟燭圖的步驟 Dec 17, 2023 pm 06:55 PM

股票分析必備工具:學習PHP和JS繪製蠟燭圖的步驟,需要具體程式碼範例隨著網路和科技的快速發展,股票交易已成為許多投資者的重要途徑之一。而股票分析是投資人決策的重要一環,其中蠟燭圖被廣泛應用於技術分析。學習如何使用PHP和JS繪製蠟燭圖將為投資者提供更多直觀的信息,幫助他們更好地做出決策。蠟燭圖是一種以蠟燭形狀來展示股票價格的技術圖表。它展示了股票價格的

PHP與JS開發技巧:掌握繪製股票蠟燭圖的方法 PHP與JS開發技巧:掌握繪製股票蠟燭圖的方法 Dec 18, 2023 pm 03:39 PM

隨著網路金融的快速發展,股票投資已經成為了越來越多人的選擇。而在股票交易中,蠟燭圖是常用的技術分析方法,它能夠顯示股票價格的變動趨勢,幫助投資人做出更精準的決策。本文將透過介紹PHP和JS的開發技巧,帶領讀者了解如何繪製股票蠟燭圖,並提供具體的程式碼範例。一、了解股票蠟燭圖在介紹如何繪製股票蠟燭圖之前,我們首先需要先了解什麼是蠟燭圖。蠟燭圖是由日本人

JavaScript與WebSocket:打造高效率的即時天氣預報系統 JavaScript與WebSocket:打造高效率的即時天氣預報系統 Dec 17, 2023 pm 05:13 PM

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

簡易JavaScript教學:取得HTTP狀態碼的方法 簡易JavaScript教學:取得HTTP狀態碼的方法 Jan 05, 2024 pm 06:08 PM

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

js和vue的關係 js和vue的關係 Mar 11, 2024 pm 05:21 PM

js和vue的關係:1、JS作為Web開發基石;2、Vue.js作為前端框架的崛起;3、JS與Vue的互補關係;4、JS與Vue的實踐應用。

See all articles