javascript
《JavaScript高级程序设计》学习笔记 JavaScript基本(1)
文章目錄
- JavaScript實現
- 1.ECMAScript
- (1)描述JavaScript
- (2)版本
- 2.DOM 文檔對象模型 API
- 3.BOM 瀏覽器對象模型 API
- script元素
- 1.8個屬性
- 2.script標簽的位置
- 3.defer屬性
- 4.async屬性
- 5.動態生成script
- 行內文件與外部文件
- 1.使用外部文件的好處
- 2.noscript可以指定在瀏覽器不支持腳本時顯示的內容。
- 語法## 標題
- 1.簡介
- 2.區分大小寫
- 3.標識符規則
- 4.注釋
- 5.嚴格模式
- 6.變量
- 7.聲明風格
- 數據類型
- 1.七種基本類型
- 2.typeof
- 3.Undefined類型
- 4.Null類型
- 5.Boolean
- 6.Number
- 7.String
- 8.Symbol類型
- 9.Object
- 操作符
- 1.一元操作符:++,--,+(正號),-(負號)
- 2.位操作符:!,&,|,^,<<,>>,>>>
- 3.邏輯操作符:&&,||,!
- 4.算術運算:+,-,*,/,%,**
- 5.關系運算符:>,<,=,>=,<=,==,===,!=,!==
- 6.條件運算符:? :
- 7.復制運算符:=,*=,/=,%=,+=,-=,<<=,>>=,>>>=
- 8.逗號運算符:,
- 語句
- 1.if
- 2.do-while
- 3.while
- 4.for
- 5.for-in
- 6.for-of
- 7.標簽語句 label
- 8.break和continue
- 9.with語句
- 10.switch
- 函數
- 1.定義使用function關鍵字
- 2.函數名稱和參數名稱不能以eval或arguments作為名稱
- 3.兩個命名參數不能擁有同一個名稱
- 4.不指定返回值的函數實際上會返回特殊值undefined
發展歷史 (1)1995年,網景公司一名叫Brendan Eich的工程師開始為即將發布的Netscape
Navigator2開發一個叫Mocha(后來改名為LiveScript)的腳本語言。為了趕上發布時間,網景公司與Sun公司結為開發聯盟,共同完成LiveScript的開發,在正式發布之前,網景將名稱改為了JavaScript(為了搭上媒體但是熱炒作的Java的順風車)
(2)1996年,微軟進入瀏覽器領域,同時帶來了兩個版本的JavaScript,Netscape Navigator的JavaScript
和 IE的JScript。
(3)1997年,JavaScript1.1作為提案被提交給歐洲計算機制造協會,他們花了數月時間打造出ECMA-262,也就是ECMAScript,JavaScript腳本語言標準。
(4)1998年,國際標準化組織(ISO)和國際電工委員會(IEC)也將ECMAScript采納為標準。自此以后,各家瀏覽器均以ECMAScript作為自己JavaScript的實現依據。
JavaScript實現
核心(ECMAScript) 文檔對象模型(DOM) 瀏覽器對象模型(BOM)1.ECMAScript
(1)描述JavaScript
- 語法
- 類型
- 語句
- 關鍵字
- 保留字
- 操作符
- 全局對象
(2)版本
第一版,本質上跟網景的JavaScript1.1相同,只不過刪除了所有瀏覽器特定的代碼,外加少量修為的修改。
第二版,只是做了一些編校工作
第三版,更新了字符串處理、錯誤定義和數值輸出。此外還增加了對正則表示、新的控制語句、try/catch異常處理的支持,以及為了更好地讓標準國家化所做的少量修改。
第四版,強類型變量、新語句和數據結構、真正的類和經典的繼承,以及操作數據的新手段。
第五版,原生的解析和序列化JSON數據的JSON對象、方便繼承和高級屬性定義的方法,以及新的增強ECMAScript引擎解釋和執行代碼能力的嚴格模式。
第六版,俗稱ES6,正式支持了類、模塊、迭代器、生成器、箭頭函數、期約、反射、代理和眾多新的數據類型。
第七版,也稱ES7,只包含少量語法層面的增強,如Array.prototype.includes和指數操作符
第八版,也稱ES8,增加了異步函數(async/await)、SharedArrayBuffer及Atomics API,以及Object.values()/Object.entries()/Object.getOwnPropertyDescriptors()和字符串填充方法,明確支持對象字面量最后的逗號。
第九版,也稱ES9,異步迭代、剩余和擴張屬性、一組新的正則表達式特性、Promise finally(),以及模板字面量修訂。
第十版,也稱ES10,增加了Array.prototype.flat()/flatMap()、String.prototype.trimStart()/trimEnd()、Object.fromEntries()方法,以及Symbol.prototype.description屬性,明確定義了Function.prototype.toString()的返回值并固定了Array.prototype.description屬性,明確定義了Function.prototype.toString()的返回值并固定了Array.prototype.sort()的順序。解決了與JSOn字符串兼容的問題,定義了catch子句的可選綁定。
2.DOM 文檔對象模型 API
3.BOM 瀏覽器對象模型 API
(1)特定于瀏覽器的擴展
彈出新瀏覽器窗口的能力
移動、縮放和關閉瀏覽器窗口的能力
navigator對象,提供關于瀏覽器的詳盡信息
location對象,提供瀏覽器加載頁面的詳盡信息
screen對象,提供關于用戶屏幕分辨率的詳盡信息
performance對象,提供瀏覽器內存占用、導航行為和時間統計的詳盡信息
對cookie的支持
其他自定義對象,如XMLHttpRequest和IE的ActiveXObject
script元素
1.8個屬性
async:表示應該立即開始下載腳本,但不能阻止其他頁面動作,比如下載資源或等待其他腳本加載。只對外部腳本文件有效。
charset:使用src屬性指定的代碼字符集。
crossorigin:配置相關請求的CORS設置。默認不使用CORS。
defer:表示腳本可以延遲到文檔完全被解析和顯示之后再執行。只對外部腳本文件有效,
integerity:允許比對接收到的資源和指定的加密簽名已驗證子資源完整性。
language(廢棄):
src:表示要執行的代碼的外部文件。
type:代替language,表示代碼塊中腳本語言的內容類型(MIME類型)。
ps.不管包含什么代碼,瀏覽器都會按照scrip在頁面中出現的順序依次解釋他們,前提是它們使用defer和asyns屬性。第二個script元素的代碼必須在第一個解釋完畢之后才能開始解釋。
2.script標簽的位置
通常置于所有body內容的底部
3.defer屬性
使用的defer標簽的cript屬性會立即下載,但是延遲執行。并且不一定總是按照順序執行。
4.async屬性
使用async標記該腳本為異步,不必等腳本下載和執行完后再加載頁面,同樣也不必等到該腳本下載和執行后再加載其他腳本,且它們之間不會按照出現的次序執行,因此,因保證異步執行的腳本之間,不存在依賴關系,且異步腳本不應該在加載期間修改DOM。
5.動態生成script
可以通過動態生成DOM,生成script標簽,來達到動態生成script的效果,且此方式生成的文件是異步加載的,并且當執行到該語句時才會加載,可以通過將async設置成false將其改為同步的,或者使用link rel=“preload” href=“xxx.js”> 來顯示聲明該文件。
行內文件與外部文件
1.使用外部文件的好處
(1)可維護性。
(2)緩存。
(3)適應未來。
2.noscript可以指定在瀏覽器不支持腳本時顯示的內容。
語法## 標題
1.簡介
ECMAScript的語法很大程度借鑒了C語言和其他類C語言,如Java和Perl。
2.區分大小寫
3.標識符規則
(1)第一個字符必須是一個字母、下劃線(_)或美元符號($)
(2)剩下的字符可以是字母、下劃線、美元符號或數字。
(3)命名使用駝峰大小寫形式。
ps.關鍵字、保留字、true、false和null不能作為標識符。
4.注釋
(1)// 單行注釋
(2)/* */ 多行注釋
5.嚴格模式
(1)在腳本開頭加上"use strict",將對整個腳本開啟嚴格模式
(2)也可以在函數體開頭加上"use strict" 標識對該函數開啟嚴格模式
6.變量
(1)var關鍵字
在函數中使用var定義變量會使其成為當前函數的局部變量,若省略var,則會在執行該函數的時候,創建一個全局變量。
使用var關鍵字聲明的變量會自動提升到函數作用域頂部,該特性就是var關鍵字的聲明提升,因此利用此特性可以用var關鍵字重復聲明同一個變量。
(2)let關鍵字
let聲明的范圍是塊作用域,var聲明的是函數作用域。即let關鍵字不會提升。
暫時性死區,在let聲明執行前會出現"暫時性死區“,在此階段引用任何后面才聲明的變量都會拋出ReferenceError。
使用let在全局作用域中聲明的變量不會成為window對象的屬性,使用var聲明的變量則會。
(3)const關鍵字
聲明變量時必須同時初始化變量
變量值不可修改,但若定義的是一個對象,則可修改對象內的值,因為const的限制只適用于指向的變量的引用
7.聲明風格
(1)只使用let和const,不使用var
(2)優先使用const
數據類型
1.七種基本類型
Undefined、Null、Boolean、Number、String、Symbol和Object。
2.typeof
(1)返回值
undefined 值未定義
boolean 布爾值
string 字符串
number 數值
object 值為對象或null
function 函數
symbol 符號
ps.對null 使用typeof會返回object,因為null被認為是一個對空對象的引用。
3.Undefined類型
(1)只有一個值undefined
(2)若僅聲明變量而未初始化,就相當于給變量賦予了undefined值
(3)對未定義的變量使用typeof的返回值也是undefined
4.Null類型
(1)只有一個值null
(2)null表示一個空對象指針
(3)和undefined表面上相等,使用==返回true
5.Boolean
(1)有兩個值true和false
(2)使用Boolean()可以將任意數據類型轉換為bool值
值為true
String,非空字符串
Number,非0數值
Object,任意對象
Undefined,N/A
值為false
String,“”
Number,0、NaN
Object,null
Undefined,undefined
6.Number
(1)浮點數的精確度最高可達17位小數,但在算術計算中遠不如整數精確,如0.1加0.2得到的不是0.3,而是0.30000000000000004,因此不要去測試浮點數的值
(2)Number的最大值保存在Number.MAX_VALUE中,最小值保存在Number.MIN_VALUE中,若超出最大值則返回Infinity,超出最小值返回-Infinity
ps.使用Number.NEGATIVE_INFINITY和Number.POSITIVE_INFINITY可分別獲取到-Infinity和Infinity
(3)NaN(不是數值)用于表示本來要返回數值的操作失敗了。
用0除以任意數值
分母是0
任何設計NaN的操作
NaN不等于包括NaN在內的任何值,可以使用isNaN()判斷是否非數值,該方法可以將可以轉換為數值的值轉換為數值
(4)數值轉換
Number(),忽略數值前的0
parseInt(),解析八進制和十六進制值
parseFloat(),不解析八進制和十六進制值
7.String
1.字符串在創建之后它的值就不可改變了,若進行字符串拼接操作,會先創建出一個足夠容納兩個字符串的空間,將兩個字符串放置進去,然后將這個兩個字符串銷毀。
2.toString()方法可以將任意類型轉換成它的字符串表示量
3.模板字面量
(1)定義在``之間
(2)支持跨行定義
(3)使用${變量名}占位
8.Symbol類型
(1)使用Symbol() 函數初始化
(2)使用Symbol.for()進行全局符號注冊,若沒有該符號,會生成一個該符號并加入到注冊表中。
(3)使用符號作為屬性
(4)Symbol內置符號
9.Object
(1)定義:一組數據和功能的集合。
操作符
1.一元操作符:++,–,+(正號),-(負號)
2.位操作符:!,&,|,^,<<,>>,>>>
3.邏輯操作符:&&,||,!
4.算術運算:+,-,*,/,%,**
5.關系運算符:>,<,=,>=,<=,,=,!=,!==
6.條件運算符:? :
7.復制運算符:=,*=,/=,%=,+=,-=,<<=,>>=,>>>=
8.逗號運算符:,
語句
1.if
2.do-while
3.while
4.for
5.for-in
一種嚴格的迭代語句,用于枚舉對象中的非符號鍵屬性,所有可枚舉的屬性都會返回一次,但返回的順序因瀏覽器而異
6.for-of
用于遍歷可迭代對象的元素
7.標簽語句 label
function(){} 用于給語句加標簽
8.break和continue
9.with語句
將代碼作用域設置為特定的對象
10.switch
函數
1.定義使用function關鍵字
2.函數名稱和參數名稱不能以eval或arguments作為名稱
3.兩個命名參數不能擁有同一個名稱
4.不指定返回值的函數實際上會返回特殊值undefined
總結
以上是生活随笔為你收集整理的《JavaScript高级程序设计》学习笔记 JavaScript基本(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 原生H5+JS文件上传
- 下一篇: uppy JavaScript 文件上传