js核心語法

1.NaN

isNaN():非數(not number),可確定值是否為非數字,是非數字(不是數字)輸出true,不是非數(是數字)輸出fluse

NaN 表示 “不是一個數字”,但是 NaN 的 typeof 結果卻是 number

2.replace方法

x.replace(原文本需要更改的部分,被更改為)

3.外部文件:可以把腳本保存到外部文件中。外部文件通常包含被多個網頁使用的代碼。

外部 JavaScript 文件的文件擴展名是 .js。

如需使用外部文件,請在 <script> 標簽的 "src" 屬性中設置該 .js 文件:

<script src="myScript.js"></script>

注釋:myFunction 保存在名為 "myScript.js" 的外部文件中。

4.對象也是一個變量,但對象可以包含多個變量,每個值以 name:value 對呈現。

var car = {name:"Fiat", model:500, color:"white"};

5.對象方法作為一個函數定義存儲在對象屬性中。對象也是變量,但是對象包含多個變量屬性

對象方法是一個函數定義,并作為一個屬性值存儲。

var person = {

? ? firstName: "John",

? ? lastName : "Doe",

? ? fullName : function() //對象方法(作為函數定義儲存在對象屬性中)

? ? {

? ? ? return this.firstName + " " + this.lastName;

? ? }

對象方法通過添加 () 調用 (作為一個函數)。

接上:

document.getElementById("demo").innerHTML = person.fullName();

6.作用域是可訪問變量的集合。

如果變量在函數內沒有聲明(沒有使用 var 關鍵字),該變量為全局變量。

function myFunction() {

? ? carName = "Volvo";//沒有使用給關鍵字var,為全局變量

}

7.Math.random()

是令系統隨機選取大于等于 0.0 且小于 1.0 的偽隨機 double 值

8.for/in 語句循環遍歷對象的屬性

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 循環:

該循環至少會執行一次,即使條件為 false 它也會執行一次,因為代碼塊會在條件被測試前執行:

do

{

? ? 需要執行的代碼

}

while (條件);

10.break和continue的區別:

break:break 語句可用于跳出循環。

continue:continue 語句中斷當前的循環中的迭代,然后繼續循環下一個迭代

11.typeof(數據類型)和indexOf(返回指定字符串在字符串中首次出現的位置)

typeof 操作符來檢測變量的數據類型

數組是一種特殊的對象類型。 因此 typeof [1,2,3,4] 返回 object。

使用typeof檢測:對象{ }和數組[ ]的數據類型都是object(對象)

null 值為空,但是數據類型是object。 undefined值為 undefined, 類型為 undefined。

typeof 一個沒有值的變量會返回 undefined

null 和 undefined 的值相等,但類型不等:

typeof undefined? ? ? // undefined

typeof null? ? ? ? // object

null === undefined? ? ? // false

null == undefined? ? ? // true

12.js的 6 種不同的數據類型:

string

number

boolean

object

function

symbol

13.js三種對象類型:

Object

Date:數據類型為object

Array:數據類型為object

2 個不包含任何值的數據類型:

null:數據類型為object

undefined:數據類型為undefined

NaN:數據類型為number

14。強轉為數字

:字符串包含數字(如 "3.14") 轉換為數字 (如 3.14)。空字符串轉換為 0。其他的字符串會轉換為 NaN (不是個數字)。

Number("3.14") // 返回 3.14 Number(" ")? // 返回 0 Number("")? // 返回 0 Number("99 88") // 返回 NaN

15.變量后跟一個+:變量的數據類型會轉換為數字型

將布爾值轉換為數字

全局方法 Number() 可將布爾值轉換為數字:

Number(false)? // 返回 0 Number(true)? // 返回 1

日期方法 getTime()和Number() 都可將日期轉換為數字:d = new Date(); Number(d) d.getTime()

16.正則基礎

正則表達式可以匹配某些特定的數據,可以從龐大的文字信息中提取出一小段你需要的數據

(1)字符組([])允許匹配一組可能出現的字符。匹配Java和 java:[Jj]ava

(2)連字符(-)代表區間.

匹配數據所有的數字、小寫字母和大寫字母:[0-9a-zA-Z]

(3)在正則中使用 \ 就可以進行對特殊符號進行轉義 匹配-:-

(4)[]字符組中可以放多個條件例如,想要匹配數字和小寫字母可以這樣寫:[0-9a-z]

(5)字符串開頭使用^實現取反

在字符數組開頭使用 ^ 字符實現取反操作 n【^e】 的意思就是n后面的字母不能為 e

(6)\w:任意字符

\w:與任意單詞字符匹配:即【0-9】,【a-z】,【A-Z】,_(下劃線)

(7)\d:與任意數字匹配

(8)\s:匹配空格

\s快捷方式可以匹配空白字符,比如空格,tab、換行等。

(9)\s【^D】:空白字符后面不跟D

(10)\b 匹配的是單詞的邊界

(11)快捷方法取反:小寫改大寫

快捷方式也可以取反,例如對于\w的取反為\W,將小寫改寫成大寫即可,其他快捷方式也遵循這個規則。

(12)^區間內取反,^區間外表字符串開始

^在區間里面是取反,在區間外邊表示一個字符串的開始 ^字符串

(13)$表示字符串結尾

在區間外部后邊寫$,表示一個字符串的結尾 字符串$

(14).為任意字符

.是任意字符,只能出現在方括號之外,.字符只有一個不能匹配的字符,也就是換行符(\n)

(15)?是可選字符

,字符后加?,表示該字符可出現可不出現,即?用于匹配它之前的字符0次或1次

(16){M,N}:重復區間

不知道具體要匹配字符組要重復的次數時使用重復區間,語法:{M,N},M是下界而N是上界

\d{3,4} 既可以匹配3個數字也可以匹配4個數字,不過當有4個數字的時候,優先匹配的是4個數字,這是因為正則表達式默認是貪婪模式,即盡可能的匹配更多字符,而要使用非貪婪模式,我們要在表達式后面加上 ?號。

(17)開區間:\d{n,} 閉區間不寫即可表示匹配一個或無數個。

+ 匹配1個到無數個,使用 *代表0個到無數個

+等價于{1,},*等價于{0,}。

正則總結:

實例 描述

[Pp]ython 匹配 “Python” 或 “python”。

rub[ye] 匹配 “ruby” 或 “rube”。

[abcdef] 匹配中括號內的任意一個字母。

[0-9] 匹配任何數字。類似于 [0123456789]。

[a-z] 匹配任何小寫字母。

[A-Z] 匹配任何大寫字母。

[a-zA-Z0-9] 匹配任何字母及數字。

[^au] 除了au字母以外的所有字符。

[^0-9] 匹配除了數字外的字符。

實例 描述

. 匹配除 “\n” 之外的任何單個字符。要匹配包括 ‘\n’ 在內的任何字符,請使用象 ‘[.\n]’ 的模式。

? 匹配一個字符零次或一次,另一個作用是非貪婪模式

+ 匹配1次或多次

* 匹配0次或多次

\b 匹配單詞的邊界

\d 匹配一個數字字符。等價于 [0-9]。匹配多個數字字符:\d{n}

\D 匹配一個非數字字符,等價于 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)使用()提取分組:

提取分組使用()即可,分組的功能——捕獲數據

(2)|是或者

或者:使用分組的同時還可以使用或者,即|

例如:正則表達式提取所有的視頻文件的后綴 \w{0,8}(.mp4|.avi|.wmv|.rmvb)

(3)非捕獲分組(?:表達式),可使用可不用

當并不需要捕獲某個分組的內容,但是又想使用分組的特性的時候就可以使用非捕獲組(?:表達式),從而不捕獲數據,還能使用分組的功能。此時也可以使用|

(4)分組使用技巧:

(\d{4})[-./\s]?(\d{1,2})[-./\s]?(\d{1,2}) 就可以從文本中將年月日分別提取出來了。[-./\s]表示匹配三個可能出現的分隔符-./和空白,?表示匹配它們0次或者1次,其他年月日的數據使用\d{N}與分組結合就可以提取到目標數據。

(5)分組的回溯引用:

代碼0123< font >提示< /font >abcd 的正則表達式為:<\w+> .*? </\w+>

他的回溯引用為:<\w+> (.*?) </\1>

分組的回溯引用,使用\N可以引用編號為N的分組

18.拋出(throw)錯誤(err)

錯誤:當錯誤發生時,js會生成一個錯誤消息,即JavaScript 將拋出(throw)一個錯誤。

try 語句測試代碼塊的錯誤。

catch 語句處理錯誤。 try 和 catch 是成對出現的

throw 語句創建自定義錯誤,結束處理。

finally 語句在 try 和 catch 語句之后,無論是否有觸發異常,該語句都會執行。

(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+="點擊確定繼續。\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 "值不是一個數字";

? ? 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; //可選

? ? //你可以有任意數量的case語句

? ? default : //可選

? ? ? //語句

}

switch case 執行時,一定會先進行匹配,匹配成功返回當前 case 的值,再根據是否有 break,判斷是否繼續輸出,或是跳出判斷。

switch 語句會使用恒等計算符(===)進行比較,如果進行比較的兩字符數據類型不相等,返回false

20.加法與連接:數字1+數字2輸出加法,數字1+字符1=兩字符連接。

1+2=3,1+“2”=12

21.出現return,自動默認結束語句,返回值

22.數組不支持使用名字作為索引,只支持使用數字進行索引,對象使用名字進行索引

定義數組元素時,數組最后不能添加逗號。var colors = [5, 6, 7,]; //這樣數組的長度可能為3 也可能為4。

23.表單驗證:

<script>

function validateForm() {//表單驗證的方法函數

//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":發送表單數據到文件中,連接外部文件(處理輸入)

? ? οnsubmit="return validateForm()":onsubmit會在表單中的確認按鈕被點擊時發生(手動驗證表單)

? ? 表單自動驗證:required="required":點擊提交按鈕,如果輸入框是空的,瀏覽器會提示錯誤信息。 如果表單字段 (fname) 的值為空, required 屬性會阻止表單提交

? ? method="post"表示表單中的數據以post方法傳遞。Form提供了兩種數據傳輸的方式——get和post。

indexOf() 和lastIndexOf() 方法:

indexOf() 方法:可返回某個指定的字符串值在字符串中首次出現的位置,如果要檢索的字符串值沒有出現,則該方法返回 -1。

lastIndexOf() 方法可返回一個指定的字符串值最后出現的位置,在一個字符串中的指定位置從后向前搜索。如果要檢索的字符串值沒有出現,則該方法返回 -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 元素中的數據是合法的返回 true,否則返回 false。

? document.getElementById("demo").innerHTML = demo.validationMessage;//validationMessage:瀏覽器提示錯誤信息

? ? ? ? }

25.let和const

let:let 聲明的變量只在 let 命令所在的代碼塊 {} 內有效,在 {} 之外不能訪問。

var x = 10;

// 這里輸出 x 為 10

{

? ? let x = 2;

? ? // 這里輸出 x 為 2

}

// 這里輸出 x 為 10

let 關鍵字定義的變量則不可以在使用后聲明,也就是變量需要先聲明再使用。

const:const 用于聲明一個或多個常量,聲明時必須進行初始化,且初始化后的值不可再修改,const 定義的變量并非常量,并非不可變,它定義了一個常量引用一個值。使用 const 定義的對象屬性或者數組是可變的

const不能對常量對象/數組重新賦值,但是可以對常量數組進行修改

// 創建常量對象

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(第一個參數是個回調函數(箭頭函數),第二個參數是毫秒數)

回調函數:

setTimeout(function () {

? ? document.getElementById("demo").innerHTML="RUNOOB!";

}, 3000);

箭頭函數:

setTimeout(()=> {

? ? document.getElementById("demo").innerHTML="RUNOOB!";

}, 3000);

28.函數自調用

:表達式后面緊跟 () ,則會自動調用

(function () {

? ? var x = "Hello!!";? ? ? // 我將調用自己

})();

29.函數顯式參數在函數定義時列出。函數隱式參數在函數調用時傳遞給函數真正的值。

函數可以自帶參數

<script>

function myFunction(x, y = 10) {

? ? // 如果不傳入參數 y ,則其默認值為 10

? ? return x + y;

}

// 輸出 2

document.getElementById("demo1").innerHTML = myFunction(0, 2) ;

// 輸出 15, y 參數的默認值

document.getElementById("demo2").innerHTML = myFunction(5);

</script>

30.arguments:通過索引引用參數的類數組對象

arguments:類似于數組,arguments對象是所有函數中可用的局部變量。你可以使用arguments對象在函數中引用函數的參數。當我們不確定有多少個參數傳遞的時候,可以用 arguments 來獲取。在 JavaScript 中,arguments 實際上它是當前函數的一個內置對象。

所有函數都內置了一個 arguments 對象,arguments 對象中存儲了傳遞的所有實參。

arguments展示形式是一個偽數組,具有 length 屬性,可以進行遍歷。

如果一個函數傳遞了三個參數,你可以以如下方式引用他們:

arguments[0]

arguments[1]

arguments[2]

31.閉包:

在一個函數內部定義另外一個函數,并且返回內部函數或者立即執行內部函數。

內部函數可以讀取外部函數定義的局部變量

如果我們在js中寫的方法都是全局的方法,在需要嵌入到別人的界面中的時候,這些全局的東西很可能會和別人的東西重名從而引發錯誤,所以說需要用js閉包包起來。

我的理解是,閉包就是能夠讀取其他函數內部變量的函數。

32.constructor():類的構造函數

類:類是用于創建對象的模板。使用 class 關鍵字來創建類,類體在一對大括號 {} 中, {} 中定義類成員的位置,如方法或構造函數。

每個類中包含了一個特殊的方法 constructor(),即類的構造器,它是類的構造函數,這種方法用于創建和初始化一個由 class 創建的對象。使用前沒有聲明會報錯

<script>

? class Runoob {

? constructor(name, url) {

? ? this.name = name;

? ? this.url = url;

? }

}//創建了一個名為Runoob的類,初始化了name和url兩個屬性

let site = new Runoob("菜鳥教程",? "http://www.runoob.com");//定義好類之后使用new創建對象

document.getElementById("demo").innerHTML =

site.name + ":" + site.url;//對象可以使用類中初始化的屬性

</script>

構造方法是一種特殊的方法:

構造方法名為 constructor()。

構造方法在創建新對象時會自動執行。

構造方法用于初始化對象屬性。

如果不定義構造方法,JavaScript 會自動添加一個空的構造方法。

類聲明和類表達式的主體都執行在嚴格模式下,不能使用沒有聲明的變量

33.super類繼承

類繼承:類繼承使用extends關鍵字,super()方法調用父類的構造函數,

// 基類

class Animal {

? ? // eat() 函數

? ? // sleep() 函數

};

//派生類

class Dog extends Animal {

? ? // bark() 函數

};

super() 方法引用父類的構造方法。

通過在構造方法中調用 super() 方法,我們調用了父類的構造方法,這樣就可以訪問父類的屬性和方法

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;

靜態方法

靜態方法:靜態方法是使用 static 關鍵字修飾的方法,又叫類方法,屬于類的,但不屬于對象,在實例化對象之前可以通過 類名.方法名 調用靜態方法。靜態方法不能在對象上調用,只能在類中調用。實例對象調用靜態方法會報錯,如果你想在實例對象 中使用靜態方法,可以將實例對象作為一個參數傳遞給靜態方法

javascript前端開發語言

發布于2023-04-09

著作權歸作者所有

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,622評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,716評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,746評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,991評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,706評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,036評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,029評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,203評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,725評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,451評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,677評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,161評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,857評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,266評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,606評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,407評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,643評論 2 380

推薦閱讀更多精彩內容