1.NaN
isNaN():非數(shù)(not number)祝旷,可確定值是否為非數(shù)字掀潮,是非數(shù)字(不是數(shù)字)輸出true匈挖,不是非數(shù)(是數(shù)字)輸出fluse
NaN 表示 “不是一個數(shù)字”寻歧,但是 NaN 的 typeof 結果卻是 number
2.replace方法
x.replace(原文本需要更改的部分耘戚,被更改為)
3.外部文件:可以把腳本保存到外部文件中。外部文件通常包含被多個網(wǎng)頁使用的代碼本涕。
外部 JavaScript 文件的文件擴展名是 .js业汰。
如需使用外部文件,請在 <script> 標簽的 "src" 屬性中設置該 .js 文件:
<script src="myScript.js"></script>
注釋:myFunction 保存在名為 "myScript.js" 的外部文件中菩颖。
4.對象也是一個變量样漆,但對象可以包含多個變量,每個值以 name:value 對呈現(xiàn)晦闰。
var car = {name:"Fiat", model:500, color:"white"};
5.對象方法作為一個函數(shù)定義存儲在對象屬性中放祟。對象也是變量,但是對象包含多個變量屬性
對象方法是一個函數(shù)定義,并作為一個屬性值存儲呻右。
var person = {
? ? firstName: "John",
? ? lastName : "Doe",
? ? fullName : function() //對象方法(作為函數(shù)定義儲存在對象屬性中)
? ? {
? ? ? return this.firstName + " " + this.lastName;
? ? }
對象方法通過添加 () 調(diào)用 (作為一個函數(shù))跪妥。
接上:
document.getElementById("demo").innerHTML = person.fullName();
6.作用域是可訪問變量的集合。
如果變量在函數(shù)內(nèi)沒有聲明(沒有使用 var 關鍵字)声滥,該變量為全局變量眉撵。
function myFunction() {
? ? carName = "Volvo";//沒有使用給關鍵字var,為全局變量
}
7.Math.random()
是令系統(tǒng)隨機選取大于等于 0.0 且小于 1.0 的偽隨機 double 值
8.for/in 語句循環(huán)遍歷對象的屬性
function myFunction(){
? ? var x;
? ? var txt;
? ? var person={fname:"Bill",lname:"Gates",age:56};
? ? for (x in person){
? ? ? ? txt=txt + person[x];//結果:BillGates56
? ? }
9.do/while 循環(huán):
該循環(huán)至少會執(zhí)行一次落塑,即使條件為 false 它也會執(zhí)行一次纽疟,因為代碼塊會在條件被測試前執(zhí)行:
do
{
? ? 需要執(zhí)行的代碼
}
while (條件);
10.break和continue的區(qū)別:
break:break 語句可用于跳出循環(huán)。
continue:continue 語句中斷當前的循環(huán)中的迭代芜赌,然后繼續(xù)循環(huán)下一個迭代
11.typeof(數(shù)據(jù)類型)和indexOf(返回指定字符串在字符串中首次出現(xiàn)的位置)
typeof 操作符來檢測變量的數(shù)據(jù)類型
數(shù)組是一種特殊的對象類型仰挣。 因此 typeof [1,2,3,4] 返回 object。
使用typeof檢測:對象{ }和數(shù)組[ ]的數(shù)據(jù)類型都是object(對象)
null 值為空缠沈,但是數(shù)據(jù)類型是object膘壶。 undefined值為 undefined, 類型為 undefined。
typeof 一個沒有值的變量會返回 undefined
null 和 undefined 的值相等洲愤,但類型不等:
typeof undefined? ? ? // undefined
typeof null? ? ? ? // object
null === undefined? ? ? // false
null == undefined? ? ? // true
12.js的 6 種不同的數(shù)據(jù)類型:
string
number
boolean
object
function
symbol
13.js三種對象類型:
Object
Date:數(shù)據(jù)類型為object
Array:數(shù)據(jù)類型為object
2 個不包含任何值的數(shù)據(jù)類型:
null:數(shù)據(jù)類型為object
undefined:數(shù)據(jù)類型為undefined
NaN:數(shù)據(jù)類型為number
14颓芭。強轉為數(shù)字
:字符串包含數(shù)字(如 "3.14") 轉換為數(shù)字 (如 3.14)〖泶停空字符串轉換為 0亡问。其他的字符串會轉換為 NaN (不是個數(shù)字)。
Number("3.14") // 返回 3.14 Number(" ")? // 返回 0 Number("")? // 返回 0 Number("99 88") // 返回 NaN
15.變量后跟一個+:變量的數(shù)據(jù)類型會轉換為數(shù)字型
將布爾值轉換為數(shù)字
全局方法 Number() 可將布爾值轉換為數(shù)字:
Number(false)? // 返回 0 Number(true)? // 返回 1
日期方法 getTime()和Number() 都可將日期轉換為數(shù)字:d = new Date(); Number(d) d.getTime()
16.正則基礎
正則表達式可以匹配某些特定的數(shù)據(jù)肛宋,可以從龐大的文字信息中提取出一小段你需要的數(shù)據(jù)
(1)字符組([])允許匹配一組可能出現(xiàn)的字符州藕。匹配Java和 java:[Jj]ava
(2)連字符(-)代表區(qū)間.
匹配數(shù)據(jù)所有的數(shù)字、小寫字母和大寫字母:[0-9a-zA-Z]
(3)在正則中使用 \ 就可以進行對特殊符號進行轉義 匹配-:-
(4)[]字符組中可以放多個條件例如酝陈,想要匹配數(shù)字和小寫字母可以這樣寫:[0-9a-z]
(5)字符串開頭使用^實現(xiàn)取反
在字符數(shù)組開頭使用 ^ 字符實現(xiàn)取反操作 n【^e】 的意思就是n后面的字母不能為 e
(6)\w:任意字符
\w:與任意單詞字符匹配:即【0-9】床玻,【a-z】,【A-Z】沉帮,_(下劃線)
(7)\d:與任意數(shù)字匹配
(8)\s:匹配空格
\s快捷方式可以匹配空白字符锈死,比如空格贫堰,tab、換行等待牵。
(9)\s【^D】:空白字符后面不跟D
(10)\b 匹配的是單詞的邊界
(11)快捷方法取反:小寫改大寫
快捷方式也可以取反其屏,例如對于\w的取反為\W,將小寫改寫成大寫即可缨该,其他快捷方式也遵循這個規(guī)則偎行。
(12)^區(qū)間內(nèi)取反,^區(qū)間外表字符串開始
^在區(qū)間里面是取反压彭,在區(qū)間外邊表示一個字符串的開始 ^字符串
(13)$表示字符串結尾
在區(qū)間外部后邊寫$,表示一個字符串的結尾 字符串$
(14).為任意字符
.是任意字符睦优,只能出現(xiàn)在方括號之外,.字符只有一個不能匹配的字符壮不,也就是換行符(\n)
(15)汗盘?是可選字符
,字符后加询一?隐孽,表示該字符可出現(xiàn)可不出現(xiàn),即健蕊?用于匹配它之前的字符0次或1次
(16){M菱阵,N}:重復區(qū)間
不知道具體要匹配字符組要重復的次數(shù)時使用重復區(qū)間,語法:{M,N}缩功,M是下界而N是上界
\d{3,4} 既可以匹配3個數(shù)字也可以匹配4個數(shù)字晴及,不過當有4個數(shù)字的時候,優(yōu)先匹配的是4個數(shù)字嫡锌,這是因為正則表達式默認是貪婪模式虑稼,即盡可能的匹配更多字符,而要使用非貪婪模式势木,我們要在表達式后面加上 ?號蛛倦。
(17)開區(qū)間:\d{n,} 閉區(qū)間不寫即可表示匹配一個或無數(shù)個。
+ 匹配1個到無數(shù)個啦桌,使用 *代表0個到無數(shù)個
+等價于{1,}溯壶,*等價于{0,}。
正則總結:
實例 描述
[Pp]ython 匹配 “Python” 或 “python”甫男。
rub[ye] 匹配 “ruby” 或 “rube”且改。
[abcdef] 匹配中括號內(nèi)的任意一個字母。
[0-9] 匹配任何數(shù)字板驳。類似于 [0123456789]钾虐。
[a-z] 匹配任何小寫字母。
[A-Z] 匹配任何大寫字母笋庄。
[a-zA-Z0-9] 匹配任何字母及數(shù)字效扫。
[^au] 除了au字母以外的所有字符。
[^0-9] 匹配除了數(shù)字外的字符直砂。
實例 描述
. 匹配除 “\n” 之外的任何單個字符菌仁。要匹配包括 ‘\n’ 在內(nèi)的任何字符,請使用象 ‘[.\n]’ 的模式静暂。
济丘? 匹配一個字符零次或一次,另一個作用是非貪婪模式
+ 匹配1次或多次
* 匹配0次或多次
\b 匹配單詞的邊界
\d 匹配一個數(shù)字字符洽蛀。等價于 [0-9]摹迷。匹配多個數(shù)字字符:\d{n}
\D 匹配一個非數(shù)字字符,等價于 0-9郊供。
\s 匹配任何空白字符峡碉,包括空格、制表符驮审、換頁符等等鲫寄。等價于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符疯淫。等價于 \f\n\r\t\v地来。
\w 匹配包括下劃線的任何單詞字符。等價于’[A-Za-z0-9_]’熙掺。
\W 匹配任何非單詞字符未斑。等價于 ‘A-Za-z0-9_‘。
17.正則進階:
(1)使用()提取分組:
提取分組使用()即可币绩,分組的功能——捕獲數(shù)據(jù)
(2)|是或者
或者:使用分組的同時還可以使用或者蜡秽,即|
例如:正則表達式提取所有的視頻文件的后綴 \w{0,8}(.mp4|.avi|.wmv|.rmvb)
(3)非捕獲分組(?:表達式),可使用可不用
當并不需要捕獲某個分組的內(nèi)容类浪,但是又想使用分組的特性的時候就可以使用非捕獲組(?:表達式)载城,從而不捕獲數(shù)據(jù),還能使用分組的功能费就。此時也可以使用|
(4)分組使用技巧:
(\d{4})[-./\s]?(\d{1,2})[-./\s]?(\d{1,2}) 就可以從文本中將年月日分別提取出來了诉瓦。[-./\s]表示匹配三個可能出現(xiàn)的分隔符-./和空白,?表示匹配它們0次或者1次力细,其他年月日的數(shù)據(jù)使用\d{N}與分組結合就可以提取到目標數(shù)據(jù)睬澡。
(5)分組的回溯引用:
代碼0123< font >提示< /font >abcd 的正則表達式為:<\w+> .*? </\w+>
他的回溯引用為:<\w+> (.*?) </\1>
分組的回溯引用,使用\N可以引用編號為N的分組
18.拋出(throw)錯誤(err)
錯誤:當錯誤發(fā)生時眠蚂,js會生成一個錯誤消息煞聪,即JavaScript 將拋出(throw)一個錯誤。
try 語句測試代碼塊的錯誤逝慧。
catch 語句處理錯誤昔脯。 try 和 catch 是成對出現(xiàn)的
throw 語句創(chuàng)建自定義錯誤啄糙,結束處理。
finally 語句在 try 和 catch 語句之后云稚,無論是否有觸發(fā)異常隧饼,該語句都會執(zhí)行。
(1)err/error:錯誤静陈。
err對象屬性(是固定屬性):err.name(設置或返回一個錯誤名)和err.message(設置或返回一個錯誤信息)
var txt="";
function message()
{
? ? try { //測試錯誤
? ? ? ? adddlert("Welcome guest!");
? ? } catch(err) { //處理顯示錯誤燕雁,拋出錯誤
? ? ? ? txt="本頁有一個錯誤。\n\n";
? ? ? ? txt+="錯誤描述:" + err.message + "\n\n";
? ? ? ? txt+="點擊確定繼續(xù)鲸拥。\n\n";
? ? ? ? alert(txt);
? ? }
}
<button type="button" onclick="myFunction()">點我</button>
<p id="p01"></p>
<script>
function myFunction() {
? var message, x;
? message = document.getElementById("p01");
? message.innerHTML = "";
? x = document.getElementById("demo").value;
? try {
? ? if(x == "") throw "值是空的";
? ? if(isNaN(x)) throw "值不是一個數(shù)字";
? ? x = Number(x);
? ? if(x > 10) throw "太大";
? ? if(x < 5) throw "太小";
? }
? catch(err) {
? ? message.innerHTML = "錯誤: " + err + ".";
? }
}
</script>
18.變量提升:只有聲明的變量可以提升拐格,初始化過的變量無法提升
19.switch case 語句
switch case 語句:判斷一個變量與一系列值中某個值是否相等,每個值稱為一個分支
switch(expression){
? ? case value :
? ? ? //語句
? ? ? break; //可選
? ? case value :
? ? ? //語句
? ? ? break; //可選
? ? //你可以有任意數(shù)量的case語句
? ? default : //可選
? ? ? //語句
}
switch case 執(zhí)行時刑赶,一定會先進行匹配捏浊,匹配成功返回當前 case 的值,再根據(jù)是否有 break角撞,判斷是否繼續(xù)輸出呛伴,或是跳出判斷。
switch 語句會使用恒等計算符(===)進行比較,如果進行比較的兩字符數(shù)據(jù)類型不相等,返回false
20.加法與連接:數(shù)字1+數(shù)字2輸出加法凝果,數(shù)字1+字符1=兩字符連接。
1+2=3姐军,1+“2”=12
21.出現(xiàn)return,自動默認結束語句尖淘,返回值
22.數(shù)組不支持使用名字作為索引奕锌,只支持使用數(shù)字進行索引,對象使用名字進行索引
定義數(shù)組元素時村生,數(shù)組最后不能添加逗號惊暴。var colors = [5, 6, 7,]; //這樣數(shù)組的長度可能為3 也可能為4。
23.表單驗證:
<script>
function validateForm() {//表單驗證的方法函數(shù)
//document.forms趁桃,獲取頁面表單
? ? var x = document.forms["myForm"]["fname"].value;//獲取表單輸入的值辽话,處理input輸入的值
? ? if (x == null || x == "") {
? ? ? ? alert("需要輸入名字。");
? ? ? ? return false;//阻止表單提交
? ? }
}
</script>
<body>
<form name="myForm" action="demo_form.php"
onsubmit="return validateForm()" method="post">
名字: <input type="text" name="fname">
<input type="submit" value="提交">
</form>
</body>
注釋:form name="myForm":name值為“myForm”的表單
? ? action="demo_form.php":發(fā)送表單數(shù)據(jù)到文件中,連接外部文件(處理輸入)
? ? οnsubmit="return validateForm()":onsubmit會在表單中的確認按鈕被點擊時發(fā)生(手動驗證表單)
? ? 表單自動驗證:required="required":點擊提交按鈕卫病,如果輸入框是空的油啤,瀏覽器會提示錯誤信息。 如果表單字段 (fname) 的值為空, required 屬性會阻止表單提交
? ? method="post"表示表單中的數(shù)據(jù)以post方法傳遞蟀苛。Form提供了兩種數(shù)據(jù)傳輸?shù)姆绞健猤et和post益咬。
indexOf() 和lastIndexOf() 方法:
indexOf() 方法:可返回某個指定的字符串值在字符串中首次出現(xiàn)的位置,如果要檢索的字符串值沒有出現(xiàn)帜平,則該方法返回 -1幽告。
lastIndexOf() 方法可返回一個指定的字符串值最后出現(xiàn)的位置梅鹦,在一個字符串中的指定位置從后向前搜索。如果要檢索的字符串值沒有出現(xiàn)评腺,則該方法返回 -1帘瞭。
24.API約束驗證:約束驗證 API用于在將值提交到服務器之前檢查用戶已輸入到表單控件中的值。
<input id="id1" type="number" min="100" max="300" required>
var demo = document.getElementById("id1");
if (demo.checkValidity() == false) {//checkValidity()如果 input 元素中的數(shù)據(jù)是合法的返回 true蒿讥,否則返回 false。
? document.getElementById("demo").innerHTML = demo.validationMessage;//validationMessage:瀏覽器提示錯誤信息
? ? ? ? }
25.let和const
let:let 聲明的變量只在 let 命令所在的代碼塊 {} 內(nèi)有效抛腕,在 {} 之外不能訪問芋绸。
var x = 10;
// 這里輸出 x 為 10
{
? ? let x = 2;
? ? // 這里輸出 x 為 2
}
// 這里輸出 x 為 10
let 關鍵字定義的變量則不可以在使用后聲明,也就是變量需要先聲明再使用担敌。
const:const 用于聲明一個或多個常量摔敛,聲明時必須進行初始化,且初始化后的值不可再修改全封,const 定義的變量并非常量马昙,并非不可變,它定義了一個常量引用一個值刹悴。使用 const 定義的對象屬性或者數(shù)組是可變的
const不能對常量對象/數(shù)組重新賦值行楞,但是可以對常量數(shù)組進行修改
// 創(chuàng)建常量對象
const car = {type:"Fiat", model:"500", color:"white"};
// 修改屬性:
car.color = "red";
// 添加屬性
car.owner = "Johnson";
const 關鍵字定義的變量則不可以在使用后聲明,也就是變量需要先聲明再使用土匀。
26.id定位:
<!--a標簽的href屬性指定要跳轉的錨點-->
< a href="#pos">點我定位到指定位置!</a>
< p id="pos">尾部定位點</p>
27.異步編程
:setTimeout(第一個參數(shù)是個回調(diào)函數(shù)(箭頭函數(shù))子房,第二個參數(shù)是毫秒數(shù))
回調(diào)函數(shù):
setTimeout(function () {
? ? document.getElementById("demo").innerHTML="RUNOOB!";
}, 3000);
箭頭函數(shù):
setTimeout(()=> {
? ? document.getElementById("demo").innerHTML="RUNOOB!";
}, 3000);
28.函數(shù)自調(diào)用
:表達式后面緊跟 () ,則會自動調(diào)用
(function () {
? ? var x = "Hello!!";? ? ? // 我將調(diào)用自己
})();
29.函數(shù)顯式參數(shù)在函數(shù)定義時列出就轧。函數(shù)隱式參數(shù)在函數(shù)調(diào)用時傳遞給函數(shù)真正的值证杭。
函數(shù)可以自帶參數(shù)
<script>
function myFunction(x, y = 10) {
? ? // 如果不傳入?yún)?shù) y ,則其默認值為 10
? ? return x + y;
}
// 輸出 2
document.getElementById("demo1").innerHTML = myFunction(0, 2) ;
// 輸出 15, y 參數(shù)的默認值
document.getElementById("demo2").innerHTML = myFunction(5);
</script>
30.arguments:通過索引引用參數(shù)的類數(shù)組對象
arguments:類似于數(shù)組妒御,arguments對象是所有函數(shù)中可用的局部變量解愤。你可以使用arguments對象在函數(shù)中引用函數(shù)的參數(shù)。當我們不確定有多少個參數(shù)傳遞的時候乎莉,可以用 arguments 來獲取送讲。在 JavaScript 中,arguments 實際上它是當前函數(shù)的一個內(nèi)置對象梦鉴。
所有函數(shù)都內(nèi)置了一個 arguments 對象李茫,arguments 對象中存儲了傳遞的所有實參。
arguments展示形式是一個偽數(shù)組肥橙,具有 length 屬性魄宏,可以進行遍歷。
如果一個函數(shù)傳遞了三個參數(shù)存筏,你可以以如下方式引用他們:
arguments[0]
arguments[1]
arguments[2]
31.閉包:
在一個函數(shù)內(nèi)部定義另外一個函數(shù)宠互,并且返回內(nèi)部函數(shù)或者立即執(zhí)行內(nèi)部函數(shù)味榛。
內(nèi)部函數(shù)可以讀取外部函數(shù)定義的局部變量
如果我們在js中寫的方法都是全局的方法,在需要嵌入到別人的界面中的時候予跌,這些全局的東西很可能會和別人的東西重名從而引發(fā)錯誤搏色,所以說需要用js閉包包起來。
我的理解是券册,閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)频轿。
32.constructor():類的構造函數(shù)
類:類是用于創(chuàng)建對象的模板。使用 class 關鍵字來創(chuàng)建類烁焙,類體在一對大括號 {} 中航邢, {} 中定義類成員的位置,如方法或構造函數(shù)骄蝇。
每個類中包含了一個特殊的方法 constructor()膳殷,即類的構造器,它是類的構造函數(shù)九火,這種方法用于創(chuàng)建和初始化一個由 class 創(chuàng)建的對象赚窃。使用前沒有聲明會報錯
<script>
? class Runoob {
? constructor(name, url) {
? ? this.name = name;
? ? this.url = url;
? }
}//創(chuàng)建了一個名為Runoob的類,初始化了name和url兩個屬性
let site = new Runoob("菜鳥教程",? "http://www.runoob.com");//定義好類之后使用new創(chuàng)建對象
document.getElementById("demo").innerHTML =
site.name + ":" + site.url;//對象可以使用類中初始化的屬性
</script>
構造方法是一種特殊的方法:
構造方法名為 constructor()岔激。
構造方法在創(chuàng)建新對象時會自動執(zhí)行勒极。
構造方法用于初始化對象屬性。
如果不定義構造方法鹦倚,JavaScript 會自動添加一個空的構造方法河质。
類聲明和類表達式的主體都執(zhí)行在嚴格模式下,不能使用沒有聲明的變量
33.super類繼承
類繼承:類繼承使用extends關鍵字震叙,super()方法調(diào)用父類的構造函數(shù)掀鹅,
// 基類
class Animal {
? ? // eat() 函數(shù)
? ? // sleep() 函數(shù)
};
//派生類
class Dog extends Animal {
? ? // bark() 函數(shù)
};
super() 方法引用父類的構造方法。
通過在構造方法中調(diào)用 super() 方法媒楼,我們調(diào)用了父類的構造方法乐尊,這樣就可以訪問父類的屬性和方法
class Runoob extends Site {
? constructor(name, age) {
? ? super(name);
? ? this.age = age;
? }
setter和getter
setter和getter:getter是獲取屬性的方法,setter是設置屬性的方法划址。
class Runoob {
? constructor(name) {
? ? this.sitename = name;
? }
? get s_name() {
? ? return this.sitename;
? }
? set s_name(x) {
? ? this.sitename = x;
? }
}
let noob = new Runoob("菜鳥教程");
document.getElementById("demo").innerHTML = noob.s_name;
靜態(tài)方法
靜態(tài)方法:靜態(tài)方法是使用 static 關鍵字修飾的方法扔嵌,又叫類方法,屬于類的夺颤,但不屬于對象痢缎,在實例化對象之前可以通過 類名.方法名 調(diào)用靜態(tài)方法。靜態(tài)方法不能在對象上調(diào)用世澜,只能在類中調(diào)用独旷。實例對象調(diào)用靜態(tài)方法會報錯,如果你想在實例對象 中使用靜態(tài)方法,可以將實例對象作為一個參數(shù)傳遞給靜態(tài)方法
javascript前端開發(fā)語言
發(fā)布于2023-04-09
著作權歸作者所有