前端(三)-JavaScript

来源:https://www.cnblogs.com/xiaoqigui/archive/2022/07/11/16466000.html
-Advertisement-
Play Games

1、基本語法 1.1 引入JavaScript 1.1.1行內引入 <input type="button" value="輕輕點我一下" onclick="javascript:alert('正在學習Javascript!')"> 1.1.2 內部引入 <script type="text/jav ...


1、基本語法

1.1 引入JavaScript

1.1.1行內引入

<input type="button" value="輕輕點我一下" onclick="javascript:alert('正在學習Javascript!')">

1.1.2 內部引入

<script type="text/javascript">
    function testClickTwo(){
        alert("正在學習JavaScriptTwo")
    }
</script>

<input type="button" value="輕輕點我一下Two" onclick="testClickTwo()">

1.1.3 外部引入

<!-- 引入外部js腳本文件 -->
<script src="js/test.js" type="text/javascript"></script>

1.2 數據類型和變數

typeof

查看數據類型;

關鍵字 類型
undefined 未定義
number 數字
string 字元串
boolean 布爾

number 的註意點

  • NaN; NaN表示Not a Number,當無法計算結果時用NaN表示 ;
  • Infinity; Infinity表示無限大,當數值超過了JavaScript的Number所能表示的最大值時,就 表示為Infinity;

1.3 strict模式

JavaScript在設計之初,為了方便初學者學習,並不強制要求用 var 申明變數。這個設計錯誤帶來了 嚴重的後果:如果一個變數沒有通過 var 申明就被使用,那麼該變數就自動被申明為全局變數;

為了修補JavaScript這一嚴重設計缺陷,ECMA在後續規範中推出了strict模式,在strict模式下運行的 JavaScript代碼,強制通過 var 申明變數,未使用 var 申明變數就使用的,將導致運行錯誤。

<!--啟用strict模式的方法是在JavaScript代碼的第一行寫上:-->
<script>
    `use strict`;
    // 如果瀏覽器支持strict模式,下麵的代碼將報ReferenceError錯誤:
    abc = 'Hello, world';  //沒有使用var聲明變數
    console.log(abc);
</script>

1.4 字元串

1.4.1 多行字元串

由於多行字元串用 \n 寫起來比較費事,所以最新的ES6標準新增了一種多行字元串的表示方法,用反 引號 ``表示:

`這是一個
多行
字元串`;

1.4.2 模板字元串(註意模板字元的放多行字元串號``反引號裡面才可以)

ES6新增了一種模板字元串,表示方法和上面的多行 字元串一樣,但是它會自動替換字元串中的變數:

var name = '小明';
var age = 20;
var message = `你好, ${name}, 你今年${age}歲了!`;
alert(message);

1.4.3 常用方法

方法 說明
length() 字元串長度
str[index] 通過下標獲取字元
toUpperCase() 變大寫
toLowerCase() 變小寫
charAt(index) 返回指定下標的字元
indexOf(str) 返回指定字元串的下標
lastIndexOf(str) 返回指定字元串最後一次出現的下標
substring(index1,index2) 返回區間的字元(前閉後開)
... ...

1.5 數組

JavaScript的 Array 可以包含任意數據類型,並通過索引來訪問每個元素。

1.5.1 初始化

//定義數組1:var 數組名 =new Array([長度]),長度可以省略
var varArray1 = new Array();
//訪問數組元素
varArray1[0] = "LPL";
varArray1[1] = "LCK";
varArray1[3] = "LEL";
console.log(varArray1);

//定義數組2,支持直接初始化
var varArray2 = new Array(10,20,30,40,50);
varArray2[5] = 60;
console.log(varArray2);

//定義數組3:直接支持使用中括弧
var varArray3 = [100,90,80];
console.log(varArray3);

1.5.2 常用方法

方法 說明
indexOd(index) 通過下標獲取元素
slice(index1,index2) 截取指定下標元素,返回新數組(前閉後開)
push(元素...) 向末尾添加任意元素
pop() 將末尾的元素刪除
unshift(元素...) 向頭部添加任意元素
shift() 將頭部的元素刪除
sort() 排序
reverse() 反轉
splice(index,num,元素...) 從指定的索引開始刪除若幹元素,然後再 從該位置添加若幹元素
concat(array) 把當前的 Array 和另一個 Array 連接起來,並返回一個新的 Array
join([符號]) 把當前 Array 的每個元素都用指定的字元串連接起 來,然後返回連接後的字元串:

1.6 對象

JavaScript的對象是一種無序的集合數據類型,它由若幹鍵值對組成。

1.6.1 定義一個對象

var 對象名 = {
    key: 'value',
    key: 'value',
    key: 'value'
}

1.6.2 獲取對象的屬性

對象.屬性

1.6.3 由於JavaScript的對象是動態類型,你可以自由地給一個對象添加或刪除屬性:

var xiaoming = {
name: '小明'
};
xiaoming.age; // undefined
xiaoming.age = 18; // 新增一個age屬性
xiaoming.age; // 18
delete xiaoming.age; // 刪除age屬性
xiaoming.age; // undefined
delete xiaoming['name']; // 刪除name屬性
xiaoming.name; // undefined
delete xiaoming.school; // 刪除一個不存在的school屬性也不會報錯

如果我們要檢測對象是否擁有某一屬性,可以用 in 操作符:

var xiaoming = {
name: '小明',
birth: 1990,
school: 'No.1 Middle School',
height: 1.70,
weight: 65,
score: null
};
'name' in xiaoming; // true
'grade' in xiaoming; // false

不過要小心,如果用 in 判斷一個屬性存在,這個屬性不一定是 這個對象的,它可能是這個對象繼承得 到的:

1 'toString' in xiaoming; // true
//因為 toString 定義在 object 對象中,而所有對象最終都會在原型鏈上指向 object,所以xiaoming 也擁有 toString 屬性。

要判斷一個屬性是否是 xiaoming 自身擁有的,而不是繼承得到的,可以用 hasOwnProperty() 方法:

var xiaoming = {
name: '小明'
};
xiaoming.hasOwnProperty('name'); // true
xiaoming.hasOwnProperty('toString'); // false

1.7 流程式控制制

1.7.1 if

1.7.2 for

for ... in , 它可以把一個對象的所有屬性依次迴圈出來:

var o = {
    name: 'Jack',
    age: 20,
    city: 'Beijing'
};
for (var key in o) {
    if (o.hasOwnProperty(key)) {
        console.log(key); // 'name', 'age', 'city'
    }
}

由於 **Array 也是對象**,而它的每個元素的**索引被視為對象的屬性**,所以**遍歷出來是下標**;

var a = ['A', 'B', 'C'];
for (var i in a) {
    console.log(i); // '0', '1', '2'
    console.log(a[i]); // 'A', 'B', 'C'
}
//請註意,for... in 對 Array 的迴圈得到的是 String 而不是 Number 。

1.7.3 while

1.8 Map 和Set

1.8.1 Map

Map 是一組鍵值對的結構,具有極快的查找速度。

1.8.1.1初始化
//初始化 Map 需要一個二維數組,或者直接初始化一個空 Map;
var m = new Map(); // 空Map
m.set('Adam', 67); // 添加新的key-value
m.set('Bob', 59);
m.has('Adam'); // 是否存在key 'Adam': true
m.get('Adam'); // 67
m.delete('Adam'); // 刪除key 'Adam'
m.get('Adam'); // undefined

//由於一個key只能對應一個value,所以,多次對一個key放入value,後面的值會把前面的值衝掉:

1.8.2 Set

Set 和 Map 類似,也是一組key的集合,但不存儲value。由於key不能重覆,所以,在 Set 中, 沒有重覆的key;

var s1 = new Set(); // 空Set
var s2 = new Set([1, 2, 3,3,'3']); // 含1, 2, 3,'3'
//重覆元素在 Set 中自動被過濾:3
//通過 delete(key) 方法可以刪除元素:

1.9 Iterable

遍歷 Array 可以採用下標迴圈,遍歷Map 和 Set 就無法使用下標。 為了統一集合類型,ES6標準引入了新的 iterable 類型,Array,Map,Set 屬於; 具有 iterable 類型的集合可以通過新的 for ... of 迴圈來遍歷。

更好的方式是直接使用 iterable 內置的 forEach 方法,它接收一個函數,每次迭代就自動回調該 函數。

1.9.1 Array

var a = new Array(元素...);
a.forEach(function (element, index, array) {
    // element: 指向當前元素的值
    // index: 指向當前索引
    // array: 指向Array對象本身
    console.log(element + ', index = ' + index);
})

1.9.2 Map

Map 的回調函數參數依次為 value 、 key 和 map 本身:

var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
m.forEach(function (value, key, map) {
	console.log(value);
});

1.9.3 set

Set 沒有索引,因此回調函數的前兩個參數都是元素本身:

var s = new Set(['A', 'B', 'C']);
s.forEach(function (element, sameElement, set) {
	console.log(element);
});

2、交互彈窗

方法 說明
alert(str) 警告彈窗,沒有返回值,只有確定按鈕
prompt(str) 有輸入框(返回值為輸入內容,直接取消返回值為空null,沒有輸入但確認返回值為空字元串)
prompt(str1,str2) 有輸入框和預設值
confirm(str) 是否選擇框(返回值,true,false)

3、函數

3.1 常用系統函數

方法 說明
parseInt(strNum) 將字元串轉換為整型數字
parseFloat(strNum) 將字元串轉換為浮點型數字
isNaN(值) true,表示不是數字,false,表示是數字

3.2 自定義函數

3.2.1定義函數

方式1

function abs(x) {
    if (x >= 0) {
    	return x;
    } else {
    	return -x;
    }
}
//一旦執行到 return 時,函數就執行完畢,並將結果返回。
//如果沒有 return 語句,函數執行完畢後也會返回結果,只是結果為 undefined 。

方式2

var abs = function (x) {
    if (x >= 0) {
    	return x;
    } else {
    	return -x;
    }
};
//在這種方式下, function (x) { ... } 是一個匿名函數,它沒有函數名。但是,這個匿名函數賦值給了變數 abs ,所以,通過變數 abs 就可以調用該函數。
//上述兩種定義完全等價,註意第二種方式按照完整語法需要在函數體末尾加一個 ; ,表示賦值語句結束。

3.3兩個重要點

3.3.1arguments 關鍵字

JavaScript還有一個免費贈送的關鍵字 arguments ,它只在函數內部起作用,並且永遠指向當前函數 的調用者傳入的所有參數。

function foo(x) {
console.log('x = ' + x); // 10
for (var i=0; i<arguments.length; i++) {
console.log('arg ' + i + ' = ' + arguments[i]); // 10, 20, 30
}
}
foo(10, 20, 30)

3.3.2 rest 參數

function foo(a, b, ...rest) {
console.log('a = ' + a);
console.log('b = ' + b);
console.log(rest);
}
foo(1, 2, 3, 4, 5);
// 結果:
// a = 1
// b = 2
// Array [ 3, 4, 5 ]
foo(1);
// 結果:
// a = 1
// b = undefined
// Array []

rest參數只能寫在最後,前面用 ... 標識,從運行結果可知,傳入的參數先綁定 a 、 b ,多餘的 參數以數組形式交給變數 rest ;

3.4 變數的作用域

描述 作用域
var聲明的變數 全局變數
不用var聲明的變數(不建議使用) 全局變數
方法以內的變數 局部變數

3.4.1 兩個關鍵字

關鍵字 說明
let 聲明局部變數的關鍵字
const 聲明常量的關鍵字

3.4.2 全局對象

實際上,JavaScript預設有一個全局對象 window ,全 局作用域的變數實際上被綁定到 window 的一個屬性:

4、事件

事件 說明
onclick 單機事件
onfocus 獲取焦點事件
onblur 失去焦點事件
onkeydown 鍵盤按下事件
onkeyup 鍵盤抬起事件
onkeypress 鍵盤產生可輸入字元事件
onmouseover 滑鼠移入事件
onmouseout 滑鼠移除事件

5、BOM

5.1 windows

方法 說明
close() 關閉瀏覽器視窗
open() 打開指定url瀏覽器視窗(可指定視窗大小)

5.2 history

方法 說明
back() 返回上一個頁面
forward() 下一個頁面
go() 載入某個具體URL (go(-1)返回上一個頁面 go(1)下一個頁面)

5.3 location

屬性 說明
host 主機名+埠號
hostname 主機名
href 完整URL(給href賦值可以跳轉到指定頁面)
方法 說明
repload() 重新載入文檔
replace() 用新的文檔替換當前文檔

5.4 document

屬性 說明
referrer 返回載入前文檔的URL
URL 返回當前文檔的URL
cookie 返回當前頁面的cookie
方法 說明
getElementById() 返回對擁有指定id的第一個對象的引用
getElementByName() 返回帶有指定name值的對象集合
getElementByTagName() 返回帶有指定標簽的對象的集合
getElementByClassName() 返回帶指定class值的對象集合
write() 向文檔寫文本,HTML表達式或JavaScript代碼

5.5 innerHTML 與 innerText

方法() 說明
innerHTML = "" 往節點裡裡面些內容,裡面的標簽會被解析
innerHTML 獲取節點裡面的內容
innerText = "" 往節點裡裡面些內容,裡面的標簽不會被解析
innerText 獲取節點裡面的內容

toFixed(number) 保留指定位數

5.6 Date

方法 說明
getDate() 每月中的第幾天
getDay() 每周的第幾天
getHours() 小時
getMinutes() 分鐘
getSeconds() 秒數
getMonth() 月份(0~11)
getFullYear() 年份
getTime() 時間戳

6.7 定時函數與清除函數(時鐘特效)

定時函數

方法 說明
setTimeout("調用的函數",等待的秒數) 指定時間後執行一次函數
setInterval("調用的函數",間隔的秒數) 指定時間間隔一直執行函數

清除函數

方法 說明
clearTimeout(setTimeout返回的ID值) 停止執行函數
clearInterval(setInterval返回的ID值) 停止執行函數

6、DOM

6.1 層次關係訪問節點

層次訪問節點1,包含text,註釋等其他內容

屬性名稱 說明
parentNode 返回接待你的父節點
childNodes 返回子節點集合,childNodes[i]
firstChild 返回節點的第一個子節點
lastChild 返回節點的最後一個子節點
nextSibling 下一個節點
previousSibling 上一個節點

層次訪問節點2,只包含標簽元素節點

屬性名稱 說明
firstElementChild 返回節點的第一個子節點
lastElementChild 返回節點的最後一個子節點
nextElementSibling 下一個節點
previousElementSibling 上一個節點

6.2 操作節點

6.2.1操作節點屬性

方法 說明
getAttribute("屬性名") 獲得節點指定屬性值
setAttribute("屬性名",屬性參數) 設置節點的屬性值

6.2.2創建和插入節點

方法 說明
cerateElement(tagName) 通過標簽名創建新的元素節點
A.appendChild(B) 把B節點(作為子節點)追加到A節點的末尾
inseretBefore(A,B) 把A節點插入到B節點之前
cloneNode(deep) 複製某個指定的節點

cloneNode(deep)的深拷貝和淺拷貝

方法 說明
cloneNode(false) 淺拷貝(不拷貝標簽內部的子元素)
cloneNode(true) 深拷貝(包括標簽內部的子元素一起拷貝)

6.2.3 刪除和替換節點

方法 說明
removeChild(node) 刪除指定的節點
replaceChild(newNode,oldNode) 用其他的節點替換指定的節點

註意只有父節點才可以刪除子節點或者替換子節點;

6.3 操作節點樣式

6.3.1 事件

修改樣式主要與事件一起使用;

事件 說明
onclick 單機事件
onfocus 獲取焦點事件
onblur 失去焦點事件
onkeydown 鍵盤按下事件
onkeyup 鍵盤抬起事件
onkeypress 鍵盤產生可輸入字元事件
onmouseover 滑鼠移入事件
onmouseout 滑鼠移除事件

6.3.2 通過節點的style屬性

元素節點.style.樣式屬性=”樣式值“;

//舉例
document.getElementById("cart").style.backgroundColor="#fff";

6.3.3 className屬性

//carOut類屬性時在CSS外部樣式中已經存在的
document.getElementById("cart").className = "cartOut";

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • XR技術的發展,為用戶帶來了全新的體驗模式。那麼,作為支撐XR發展主要學科之一的圖形學,將迎來哪些發展新機遇?移動應用開發者,該如何擁抱3D數字化轉型? 7月15日,HDD·HMS Core. Sparkle應用創新分論壇將邀請圖形領域學者、分析師、技術和產品專家,共同探討圖形技術的發展現狀和趨勢, ...
  • JavaScript基本知識點——帶你逐步解開JS的神秘面紗 在我們前面的文章中已經深入學了HTML和CSS,在網頁設計中我們已經有能力完成一個美觀的網頁框架 但僅僅是網頁框架不足以展現出網頁的魅力,JS由此而生! JavaScript概述 JavaScript是一門弱類型腳本語言,其源代碼在發往客 ...
  • 純前端實現-tab卡片化樣式切換 html內容 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>選項卡切換</title> <link rel="stylesheet" type="text/css" href="./css ...
  • 實現思路: 用戶登錄時若勾選“記住我”功能選項,則將登錄名和密碼(加密後)存入本地緩存,下次登錄頁面載入時自動獲取保存好的賬號和密碼(需解密),回顯到登錄輸入框中。 說到存入本地緩存,大家想到的一定是cookies、localStorage、sessionStorage,不過後者我是不推薦使用的,咱 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 1. 代碼輸出結果 (function(){ var x = y = 1; })(); var z; console.log(y); // 1 console.log(z); // undefined console.log(x); // ...
  • 如果元素因為其本身或其父元素設置了display:none;而無法獲取到實際的寬高,則可以使用jquery的actual方法便捷地獲取到元素地實際寬高. ...
  • 在前後端分離的項目中常常會遇到當前端頁面開發完成 但是後端介面還沒好,暫不支持聯調的情況下,一般我們會用到mock數據 這邊簡單說一下最常見且經常會遇到的curd介面模擬 註:這邊可以和後端先約定好介面路徑以及入參返參的欄位,避免二次修改 安裝依賴,新建js文件,在文件中導入mock.js,模擬列表 ...
  • 最近的項目有個需求是,這種單頁多圖一次滾動一張圖片的輪播效果,項目組件庫是antd 然而用了antd的走馬燈是這樣子的 我們可以看到官網給的api是沒有這種功能,百度上也多是在css上動刀,那樣也就畢竟繁瑣了,我們是什麼?我們是程式猿啊,程式猿就該有程式猿的樣子,怎麼能寫繁瑣的東西呢,那還怎麼為公司 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...