點擊目錄傳送ฅʕ•̫͡•ʔฅ
JavaScript簡介
- JavaScript是世界上最流行的腳本語言
- 在Web世界裏,目前只有JavaScript能跨平臺、跨瀏覽器驅動網頁,與用戶交互。
- 由於網景公司希望能在靜態HTML頁面上添加一些動態效果,於是叫
Brendan Eich
這哥們在兩週之內設計出了JavaScript語言。你沒看錯,這哥們只用了10天時間。 - 事實上JavaScript除了語法上有點像Java,其他部分基本上沒啥關係。
ECMAScript
是一種語言標準,而JavaScript
是網景公司對ECMAScript標準的一種實現,是網景的註冊商標。- 如果你遇到ECMAScript這個詞,簡單把它替換爲JavaScript就行了。
快速入門
- JavaScript的數據類型
- Number(不區分整型和浮點數)
- 字符串(
""
或''
) - 布爾值(
!
是將true
變成false
的運算符) - 比較運算符,第一種是
==
比較,它會自動轉換數據類型再比較;
第二種是===
比較,它不會自動轉換數據類型,數據類型不一致,返回false,一致,再比較。
不要使用==
比較,始終堅持使用===
比較。
NaN
這個特殊的Number
與所有其他值都不相等,包括它自己
唯一能判斷NaN的方法是通過isNaN()
函數
浮點數在運算過程中會產生誤差,因爲計算機無法精確表示無限循環小數。要比較兩個浮點數是否相等,只能計算它們之差的絕對值,看是否小於某個閾值,這不是JavaScript的設計缺陷 null
和undefined
,JavaScript的設計者希望用null表示一個空的值,而undefined表示值未定義。事實證明,這並沒有什麼卵用,區分兩者的意義不大。大多數情況下,我們都應該用null。undefined僅僅在判斷函數參數是否傳遞的情況下有用- 數組,①直接用
[]
創建數組 ②用Array()
函數
出於代碼的可讀性考慮,強烈建議直接使用[]
。 - 對象,是一組由鍵-值組成的無序集合,鍵都是字符串類型,值可以是任意數據類型
- 變量,在JavaScript中就是用一個變量名錶示,變量名是大小寫英文、數字、$和_的組合,且不能用數字開頭,可以用中文,但是,請不要給自己找麻煩。
- 縮進,通常是4個空格
- 安裝VSCode
var
這種變量本身類型不固定的語言稱之爲動態語言,與之對應的是靜態語言。靜態語言在定義變量時必須指定變量類型,如果賦值的時候類型不匹配,就會報錯。例如Java語言- 如果一個變量沒有通過
var
申明就被使用,那麼該變量就自動被申明爲全局變量 strict
模式,強制通過var
申明變量,否則報錯,在JavaScript代碼的第一行寫上'use strict';
啓用該模式
- 字符串
- 多行字符串,用反引號`…`表示(ES6新增)
- 模板字符串,用
${name}
表示,可以自動替換字符串中的變量(ES6新增,注意,name所表示的是一個變量名) - 操作字符串
- 獲取位置用索引,類似數組,例如
s[13]; // undefined 超出範圍的索引不會報錯,但一律返回undefined
- 特別注意,字符串不可變
- 如果對字符串的某個索引賦值,不會有任何錯誤,但是,也沒有任何效果
toUpperCase
、toLowerCase
、indexOf
(指定字符串位置)、substring
(返回指定索引區間的子串,注意[ , )
)、
- 獲取位置用索引,類似數組,例如
- 數組
- 大多數其他編程語言不允許直接改變數組的大小,越界訪問索引會報錯。然而,
JavaScript
的Array
卻不會有任何錯誤,它會修改Array
的大小 - 常用方法
- ①
indexOf()
對應 String的indexOf()
定位 - ②
slice()
對應 String的substring()
,如果不給slice()傳遞任何參數,它就會從頭到尾截取所有元素。 - ③
push()
和pop()
在數組末尾操作,添加或刪除若干元素 - ④
unshift()
和shift()
,同上,在數組頭部操作 - ⑤
sort()
排序 ⑥reverse()
反轉 - ⑦
splice()
方法是修改Array的 “萬能方法”,它可以從指定的索引開始刪除若干元素,然後再從該位置添加若干元素,方法返回被刪除的元素 - ⑧
concat()
連接 - ⑨
join()
每個元素都用指定的字符串連接起來,然後返回連接後形成的字符串
- ①
- 多維數組:
var arr = [[1, 2, 3], [400, 500, 600], '-'];
- 大多數其他編程語言不允許直接改變數組的大小,越界訪問索引會報錯。然而,
- 對象
- 鍵必須是字符串(鍵又名,
Key
、屬性名) - 如果屬性名包含特殊字符(無效的變量),就必須用
''
括起來,用['xxx']
來訪問 - 當
key
是一個合法的變量名時,Object['key']
與Object.key
作用一樣 - 由於JavaScript的對象是動態類型,你可以自由地給一個對象添加或刪除屬性
- 判斷一個屬性存在:
key in object
- 判斷一個屬性是否是自身擁有的:
object.hasOwnProperty(key)
- 鍵必須是字符串(鍵又名,
- 條件循環和判斷
- JavaScript 把
null
、undefined
、0
、NaN
和空字符串''
視爲false
,其他值一概視爲true
for
循環的3個條件都是可以省略的,如果沒有退出循環的判斷條件,就必須使用break
語句退出循環,否則就是死循環- Array 數組也是一個對象,而它的每個元素的索引被視爲對象的屬性
- JavaScript 把
- Map、Set 和 iterable
- 初始化Map需要一個二維數組,或者直接初始化一個空Map(用
.set()
添加key-value
) - Set和Map類似,也是一組key的集合,但不存儲value。由於key不能重複,所以,在Set中,沒有重複的元素(用
.add()
添加key
) - 用
delete
刪除元素 for ... in
循環由於歷史遺留問題,它遍歷的實際上是對象的屬性名稱for ... of
循環則完全修復了這些問題,它只循環集合本身的元素iterable
內置的forEach
方法,它接收一個函數,每次迭代就自動回調該函數Set
與Array
類似,但Set
沒有索引,因此回調函數的前兩個參數(value
、key
)都是元素本身JavaScript
的函數調用不要求參數必須一致
- 初始化Map需要一個二維數組,或者直接初始化一個空Map(用
函數
- 函數就是最基本的一種代碼抽象的方式
- 如果沒有
return
,函數執行完畢後也會返回結果,只是結果爲undefined
- 在JavaScript中函數是一個對象,函數名可以視爲指向該函數的一個變量
- 匿名函數,沒有函數名,定義時
var abs = function (x) {...};
- 因爲函數調用時對參數沒有要求,所以多傳參少傳參都不會報錯